X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fexpression.cs;h=9042dcdabad8e5405cbbbc086953ade32d7dfc81;hb=84bac28050ae38c73451b72a8cad2edfc3943f02;hp=c054330db202f339be76b7a07f01626fd207f7fe;hpb=5467391bbc7339b8e940141926294ce5987a56ae;p=mono.git diff --git a/mcs/mcs/expression.cs b/mcs/mcs/expression.cs index c054330db20..9042dcdabad 100644 --- a/mcs/mcs/expression.cs +++ b/mcs/mcs/expression.cs @@ -7570,14 +7570,21 @@ namespace Mono.CSharp bool is_value_type = type.IsStructOrEnum; VariableReference vr = target as VariableReference; + bool prepare_await = ec.HasSet (BuilderContext.Options.AsyncBody) && arguments?.ContainsEmitWithAwait () == true; + if (target != null && is_value_type && (vr != null || method == null)) { + if (prepare_await) { + arguments = arguments.Emit (ec, false, true); + prepare_await = false; + } + target.AddressOf (ec, AddressOp.Store); } else if (vr != null && vr.IsRef) { vr.EmitLoad (ec); } if (arguments != null) { - if (ec.HasSet (BuilderContext.Options.AsyncBody) && (arguments.Count > (this is NewInitialize ? 0 : 1)) && arguments.ContainsEmitWithAwait ()) + if (prepare_await) arguments = arguments.Emit (ec, false, true); arguments.Emit (ec);