// or it's a parameter
//
if (CurrentAnonymousMethod is AsyncInitializer)
- return local.IsParameter || CurrentBlock.Explicit.HasAwait;
+ return local.IsParameter || local.Block.Explicit.HasAwait || CurrentBlock.Explicit.HasAwait;
return local.Block.ParametersBlock != CurrentBlock.ParametersBlock.Original;
}
--- /dev/null
+using System;
+using System.Threading.Tasks;
+
+public class CompilerBug
+{
+ static void Main ()
+ {
+ var res = Foo ().Result;
+ Console.WriteLine (res);
+ return;
+ }
+
+ static async Task<string> Foo ()
+ {
+ Action fnAction;
+ {
+ fnAction = () => { };
+ }
+ await Task.Delay (10);
+ {
+ fnAction ();
+ }
+ return "val";
+ }
+}
</method>\r
</type>\r
</test>\r
+ <test name="test-async-39.cs">\r
+ <type name="CompilerBug">\r
+ <method name="Void Main()" attrs="145">\r
+ <size>24</size>\r
+ </method>\r
+ <method name="System.Threading.Tasks.Task`1[System.String] Foo()" attrs="145">\r
+ <size>33</size>\r
+ </method>\r
+ <method name="Void .ctor()" attrs="6278">\r
+ <size>7</size>\r
+ </method>\r
+ </type>\r
+ <type name="CompilerBug+<Foo>c__async0">\r
+ <method name="Void MoveNext()" attrs="486">\r
+ <size>220</size>\r
+ </method>\r
+ <method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">\r
+ <size>13</size>\r
+ </method>\r
+ <method name="Void <>m__0()" attrs="145">\r
+ <size>2</size>\r
+ </method>\r
+ </type>\r
+ </test>\r
<test name="test-cls-00.cs">\r
<type name="CLSCLass_6">\r
<method name="Void add_Disposed(Delegate)" attrs="2182">\r