[mcs] Better check for value type base call. Fixes #16806
authorMarek Safar <marek.safar@gmail.com>
Sat, 4 Jan 2014 09:20:47 +0000 (10:20 +0100)
committerMarek Safar <marek.safar@gmail.com>
Sat, 4 Jan 2014 14:33:11 +0000 (15:33 +0100)
mcs/mcs/expression.cs
mcs/tests/ver-il-net_4_5.xml

index c8a7999f4dbe17bdb0f11a2412c5c35b8e013ffb..dfec547a0ba4d471a859ef34eff3a5f34639a355 100644 (file)
@@ -9935,8 +9935,8 @@ namespace Mono.CSharp
                {
                        base.Emit (ec);
 
-                       var context_type = ec.CurrentType;
-                       if (context_type.IsStruct) {
+                       if (type == ec.Module.Compiler.BuiltinTypes.ValueType) {
+                               var context_type = ec.CurrentType;
                                ec.Emit (OpCodes.Ldobj, context_type);
                                ec.Emit (OpCodes.Box, context_type);
                        }
index f3573e5b8f36ec2d23ebdbe87970e895d5c1b260..3aa0535f8b709e8c00f896ef17685d3c59568aae 100644 (file)
       </method>\r
     </type>\r
   </test>\r
+  <test name="test-async-57.cs">\r
+    <type name="X">\r
+      <method name="Void Main()" attrs="150">\r
+        <size>2</size>\r
+      </method>\r
+      <method name="System.Threading.Tasks.Task TestAsync()" attrs="132">\r
+        <size>41</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>14</size>\r
+      </method>\r
+    </type>\r
+    <type name="X+&lt;TestAsync&gt;c__async0">\r
+      <method name="Void MoveNext()" attrs="486">\r
+        <size>172</size>\r
+      </method>\r
+      <method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">\r
+        <size>13</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
+  <test name="test-async-58.cs">\r
+    <type name="A">\r
+      <method name="Int32 Get()" attrs="134">\r
+        <size>10</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+    <type name="B">\r
+      <method name="System.Threading.Tasks.Task`1[System.Int32] GetAsync()" attrs="134">\r
+        <size>41</size>\r
+      </method>\r
+      <method name="Void Main()" attrs="145">\r
+        <size>17</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>7</size>\r
+      </method>\r
+    </type>\r
+    <type name="B+&lt;GetAsync&gt;c__async0">\r
+      <method name="Void MoveNext()" attrs="486">\r
+        <size>49</size>\r
+      </method>\r
+      <method name="Void SetStateMachine(IAsyncStateMachine)" attrs="486">\r
+        <size>13</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