if (ignoreAnonymous || ec.CurrentAnonymousMethod == null)
return true;
- if (ec.CurrentType.IsStruct && ec.CurrentIterator == null)
+ if (ec.CurrentType.IsStruct && !(ec.CurrentAnonymousMethod is StateMachineInitializer))
return false;
return true;
--- /dev/null
+// Compiler options: -langversion:future
+using System;
+using System.Threading.Tasks;
+using System.Threading;
+
+struct Struct
+{
+ object m_member;
+ public Struct (object member)
+ {
+ m_member = member;
+ }
+
+ public async Task<bool> AsyncMethod ()
+ {
+ bool b = (string)m_member == "1";
+ await Task.Factory.StartNew (() => -3);
+ b &= (string)m_member == "1";
+ return b;
+ }
+}
+
+class C
+{
+ static int Main ()
+ {
+ Struct s = new Struct ("1");
+ var t = s.AsyncMethod ();
+ if (!Task.WaitAll (new[] { t }, 2000))
+ return 1;
+
+ if (!t.Result)
+ return 2;
+
+ return 0;
+ }
+}
</method>
</type>
</test>
+ <test name="test-async-24.cs">
+ <type name="Struct">
+ <method name="System.Threading.Tasks.Task`1[System.Boolean] AsyncMethod()">
+ <size>39</size>
+ </method>
+ <method name="Void .ctor(Object)">
+ <size>8</size>
+ </method>
+ </type>
+ <type name="C">
+ <method name="Int32 Main()">
+ <size>62</size>
+ </method>
+ <method name="Void .ctor()">
+ <size>7</size>
+ </method>
+ </type>
+ <type name="Struct+<AsyncMethod>c__async0">
+ <method name="Void MoveNext()">
+ <size>279</size>
+ </method>
+ <method name="Int32 <>m__0()">
+ <size>3</size>
+ </method>
+ <method name="Void .ctor()">
+ <size>36</size>
+ </method>
+ </type>
+ </test>
<test name="test-cls-00.cs">
<type name="CLSCLass_6">
<method name="Void .ctor()">