Maintain only one place with dynamic explicit conversions
authorMarek Safar <marek.safar@gmail.com>
Wed, 25 Aug 2010 15:34:59 +0000 (16:34 +0100)
committerMarek Safar <marek.safar@gmail.com>
Thu, 26 Aug 2010 07:55:49 +0000 (08:55 +0100)
mcs/mcs/convert.cs
mcs/mcs/expression.cs
mcs/mcs/statement.cs
mcs/tests/dtest-003.cs
mcs/tests/ver-il-dmcs.xml

index ce2b8ecb675a57f43d148092c33b89adccef975f..5fc3cd8a914e6b40c61b3ac265571020c6cee641 100644 (file)
@@ -1246,7 +1246,7 @@ namespace Mono.CSharp {
                                case MemberKind.TypeParameter:
                                        Arguments args = new Arguments (1);
                                        args.Add (new Argument (expr));
-                                       return new DynamicConversion (target_type, 0, args, loc).Resolve (ec);
+                                       return new DynamicConversion (target_type, explicit_cast ? CSharpBinderFlags.ConvertExplicit : 0, args, loc).Resolve (ec);
                                }
 
                                return null;
index 13253f75e221939b8d2b3e8cab9c05ecdafe11a8..cbf26e46d6a4afdf8d8776c9cb80fe3f467375df 100644 (file)
@@ -1535,14 +1535,6 @@ namespace Mono.CSharp {
 
                        if (type.IsPointer && !ec.IsUnsafe) {
                                UnsafeError (ec, loc);
-                       } else if (expr.Type == InternalType.Dynamic) {
-                               if (type != InternalType.Dynamic) {
-                                       Arguments arg = new Arguments (1);
-                                       arg.Add (new Argument (expr));
-                                       return new DynamicConversion (type, CSharpBinderFlags.ConvertExplicit, arg, loc).Resolve (ec);
-                               }
-
-                               return expr;
                        }
 
                        var res = Convert.ExplicitConversion (ec, expr, type, loc);
index 1ebe7ea3c320ee8bd196c8273f76879cab453c7f..f66a37b862d20ca5832913d5973f27cc9a5d1596 100644 (file)
@@ -5462,6 +5462,9 @@ namespace Mono.CSharp {
                                                // Infer implicitly typed local variable from foreach enumerable type
                                                var_type = new TypeExpression (current_pe.Type, var_type.Location);
                                        }
+                               } else if (is_dynamic) {
+                                       // Explicit cast of dynamic collection elements has to be done at runtime
+                                       current_pe = EmptyCast.Create (current_pe, InternalType.Dynamic);
                                }
 
                                var_type = var_type.ResolveAsTypeTerminal (ec, false);
index 5789eefcced72e512acb643bc60eabb6c96e3162..d729de720671cc9d7323ebdeaf61a679d332bae8 100644 (file)
@@ -25,11 +25,10 @@ class AssertDynamicObject : DynamicMetaObject
        DynamicMetaObject GetFakeMetaObject (object value)
        {
                Type t = value == null ? typeof (object) : value.GetType ();
-               var v = Expression.Variable (t);
-               Expression e = Expression.Block (new[] { v }, Expression.Default (t));
+               Expression<Func<object>> et = () => value;
 
                Expression restr = Expression.Constant (true);
-               return new DynamicMetaObject (e, BindingRestrictions.GetExpressionRestriction (restr));
+               return new DynamicMetaObject (Expression.Convert (et.Body, t), BindingRestrictions.GetExpressionRestriction (restr));
        }
 
        public override DynamicMetaObject BindBinaryOperation (BinaryOperationBinder binder, DynamicMetaObject arg)
@@ -217,8 +216,7 @@ class Tester : DynamicObjectMock
                if (values.Count != expected.Length)
                        throw new ApplicationException (name + ": Array length does not match " + values.Count + " != " + expected.Length);
 
-               for (int i = 0; i < expected.Length; i++)
-               {
+               for (int i = 0; i < expected.Length; i++) {
                        Assert (flags.GetValue (expected[i]), flags.GetValue (values[i]), "flags");
                }
        }
@@ -300,7 +298,7 @@ class Tester : DynamicObjectMock
 
                d = checked (d + 3);
        }
-       
+
        void BinaryAddChecked_2 (dynamic d, DynamicObjectMock mock)
        {
                mock.BinaryOperation = (binder, arg) => {
@@ -317,7 +315,7 @@ class Tester : DynamicObjectMock
                checked {
                        r = () => d + 3;
                }
-               
+
                r ();
        }
 
@@ -729,10 +727,10 @@ class Tester : DynamicObjectMock
                mock.ConvertOperation = (binder) => {
                        Assert (binder.Explicit, false, "Explicit");
                        Assert (binder.Type, typeof (int), "Type");
-                       return 2;
+                       return 1;
                };
 
-               object[] o = new object [2];
+               object[] o = new object[2];
                d = o[d];
        }
 
@@ -745,7 +743,7 @@ class Tester : DynamicObjectMock
                        return (byte) 2;
                };
 
-               object b = checked((byte) d);
+               object b = checked ((byte) d);
        }
 
        void Convert_4 (dynamic d, DynamicObjectMock mock)
@@ -759,6 +757,20 @@ class Tester : DynamicObjectMock
                var g = new int[d];
        }
 
+       void Convert_5 (dynamic d, DynamicObjectMock mock)
+       {
+               int counter = 0;
+               mock.ConvertOperation = (binder) => {
+                       Assert (binder.Explicit, false, "Explicit");
+                       Assert (binder.Type, typeof (System.Collections.IEnumerable), "Type");
+                       return new object[] { 1 };
+               };
+
+               foreach (int v in d) {
+//                     Console.WriteLine (v);
+               }
+       }
+
        void GetIndex_1 (dynamic d, DynamicObjectMock mock)
        {
                mock.GetIndexOperation = (binder, args) => {
@@ -769,10 +781,10 @@ class Tester : DynamicObjectMock
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null) },
                                "ArgumentInfo");
 
-                       Assert ((IList<object>)args, new object[] { 0 }, "args");
+                       Assert ((IList<object>) args, new object[] { 0 }, "args");
                };
 
-               var o = d [0];
+               var o = d[0];
        }
 
        void GetIndex_2 (dynamic d, DynamicObjectMock mock)
@@ -832,7 +844,7 @@ class Tester : DynamicObjectMock
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.Constant | CSharpArgumentInfoFlags.UseCompileTimeType, null)
-                       },      "ArgumentInfo");
+                       }, "ArgumentInfo");
 
                        Assert ((IList<object>) args, new object[] { "foo", null }, "args");
                };
@@ -878,9 +890,9 @@ class Tester : DynamicObjectMock
                        Assert ((IList<object>) args, new object[] { typeof (bool), -1 }, "args");
                };
 
-               d (typeof (bool), name:-1);
+               d (typeof (bool), name: -1);
        }
-       
+
        void Invoke_5 (dynamic d, DynamicObjectMock mock)
        {
                mock.InvokeOperation = (binder, args) => {
@@ -894,10 +906,10 @@ class Tester : DynamicObjectMock
                        Assert ((IList<object>) args, new object[] { typeof (bool), -1 }, "args");
                };
 
-               Action<object> a = (i) => {};
+               Action<object> a = (i) => { };
                a (d);
        }
-       
+
        void InvokeMember_1 (dynamic d, DynamicObjectMock mock)
        {
                mock.InvokeMemberOperation = (binder, args) => {
@@ -1090,7 +1102,7 @@ class Tester : DynamicObjectMock
                        AssertArgument (binder, new[] {
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.None, null),
                                CSharpArgumentInfo.Create (CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.Constant, null) // CSC bug?
-                       },      "ArgumentInfo");
+                       }, "ArgumentInfo");
 
                        Assert (value, d_const, "value");
                };
@@ -1293,7 +1305,7 @@ class Tester : DynamicObjectMock
                        return true;
                };
 
-               object g = d ? 1 :4;
+               object g = d ? 1 : 4;
        }
 
        void UnaryIsTrue_2 (dynamic d, DynamicObjectMock mock)
@@ -1319,7 +1331,7 @@ class Tester : DynamicObjectMock
 
                object x = d || null;
        }
-       
+
 #pragma warning restore 168, 169, 219
 
        static bool RunTest (MethodInfo test)
@@ -1327,7 +1339,7 @@ class Tester : DynamicObjectMock
                Console.Write ("Running test {0, -25}", test.Name);
                try {
                        var d = new DynamicObjectMock ();
-                       test.Invoke (new Tester (), new [] { d, d });
+                       test.Invoke (new Tester (), new[] { d, d });
                        if (d.HitCounter < 1)
                                Assert (true, false, "HitCounter");
 
index 4343166478e55714b25f0c531b571d9177b73c66..565354c6c58a8550a5fa72fbeb43af574873f03f 100644 (file)
@@ -83,7 +83,7 @@
   <test name="dtest-003.cs">
     <type name="AssertDynamicObject">
       <method name="System.Dynamic.DynamicMetaObject GetFakeMetaObject(System.Object)">
-        <size>91</size>
+        <size>120</size>
       </method>
       <method name="System.Dynamic.DynamicMetaObject BindBinaryOperation(System.Dynamic.BinaryOperationBinder, System.Dynamic.DynamicMetaObject)">
         <size>62</size>
       <method name="System.Object &lt;Convert_4&gt;m__28(System.Dynamic.ConvertBinder)">
         <size>50</size>
       </method>
-      <method name="Void &lt;GetIndex_1&gt;m__29(System.Dynamic.GetIndexBinder, System.Object[])">
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+      <method name="Void .ctor(Object)">
+        <size>7</size>
+      </method>
+      <method name="Void .cctor()">
+        <size>34</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;&gt;c__DynamicSite0+Container0">
+      <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
+        <size>0</size>
+      </method>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
+      </method>
+    </type>
+    <type name="Tester+&lt;&gt;c__DynamicSite0+Container1">
+      <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
+        <size>0</size>
+      </method>
+      <method name="Void .ctor(Object, IntPtr)">
+        <size>0</size>
+      </method>
+    </type>
+    <type name="Tester">
+      <method name="Void Convert_5(System.Object, DynamicObjectMock)">
+        <size>226</size>
+      </method>
+      <method name="System.Object &lt;Convert_5&gt;m__29(System.Dynamic.ConvertBinder)">
+        <size>59</size>
+      </method>
+      <method name="Void &lt;GetIndex_1&gt;m__2A(System.Dynamic.GetIndexBinder, System.Object[])">
         <size>92</size>
       </method>
-      <method name="Void &lt;GetIndex_2&gt;m__2A(System.Dynamic.GetIndexBinder, System.Object[])">
+      <method name="Void &lt;GetIndex_2&gt;m__2B(System.Dynamic.GetIndexBinder, System.Object[])">
         <size>111</size>
       </method>
-      <method name="Void &lt;GetMember_1&gt;m__2C(System.Dynamic.GetMemberBinder)">
+      <method name="Void &lt;GetMember_1&gt;m__2D(System.Dynamic.GetMemberBinder)">
         <size>66</size>
       </method>
-      <method name="Void &lt;Invoke_1&gt;m__2D(System.Dynamic.InvokeBinder, System.Object[])">
+      <method name="Void &lt;Invoke_1&gt;m__2E(System.Dynamic.InvokeBinder, System.Object[])">
         <size>101</size>
       </method>
-      <method name="Void &lt;Invoke_2&gt;m__2E(System.Dynamic.InvokeBinder, System.Object[])">
+      <method name="Void &lt;Invoke_2&gt;m__2F(System.Dynamic.InvokeBinder, System.Object[])">
         <size>73</size>
       </method>
-      <method name="Void &lt;Invoke_4&gt;m__2F(System.Dynamic.InvokeBinder, System.Object[])">
+      <method name="Void &lt;Invoke_4&gt;m__30(System.Dynamic.InvokeBinder, System.Object[])">
         <size>127</size>
       </method>
-      <method name="Void &lt;Invoke_5&gt;m__30(System.Dynamic.InvokeBinder, System.Object[])">
+      <method name="Void &lt;Invoke_5&gt;m__31(System.Dynamic.InvokeBinder, System.Object[])">
         <size>127</size>
       </method>
-      <method name="Void &lt;Invoke_5&gt;m__31(System.Object)">
+      <method name="Void &lt;Invoke_5&gt;m__32(System.Object)">
         <size>1</size>
       </method>
-      <method name="Void &lt;InvokeMember_1&gt;m__32(System.Dynamic.InvokeMemberBinder, System.Object[])">
+      <method name="Void &lt;InvokeMember_1&gt;m__33(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>110</size>
       </method>
-      <method name="Void &lt;InvokeMember_3&gt;m__34(System.Dynamic.InvokeMemberBinder, System.Object[])">
+      <method name="Void &lt;InvokeMember_3&gt;m__35(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>111</size>
       </method>
-      <method name="Void &lt;InvokeMember_4&gt;m__35(System.Dynamic.InvokeMemberBinder, System.Object[])">
+      <method name="Void &lt;InvokeMember_4&gt;m__36(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>110</size>
       </method>
-      <method name="Void &lt;InvokeMember_7&gt;m__37(System.Dynamic.InvokeMemberBinder, System.Object[])">
+      <method name="Void &lt;InvokeMember_7&gt;m__38(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>90</size>
       </method>
-      <method name="Void &lt;SetIndex_1&gt;m__38(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+      <method name="Void &lt;SetIndex_1&gt;m__39(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
         <size>124</size>
       </method>
-      <method name="Void &lt;SetIndex_2&gt;m__39(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+      <method name="Void &lt;SetIndex_2&gt;m__3A(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
         <size>139</size>
       </method>
-      <method name="Void &lt;SetMember_1&gt;m__3B(System.Dynamic.SetMemberBinder, System.Object)">
+      <method name="Void &lt;SetMember_1&gt;m__3C(System.Dynamic.SetMemberBinder, System.Object)">
         <size>101</size>
       </method>
-      <method name="System.Object &lt;UnaryPlus_1&gt;m__3C(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryPlus_1&gt;m__3D(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryMinus_1&gt;m__3D(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryMinus_1&gt;m__3E(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryNot_1&gt;m__3E(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryNot_1&gt;m__3F(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryOnesComplement_1&gt;m__3F(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryOnesComplement_1&gt;m__40(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryDecrement_1&gt;m__40(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryDecrement_1&gt;m__41(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryDecrement_2&gt;m__41(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryDecrement_2&gt;m__42(System.Dynamic.UnaryOperationBinder)">
         <size>51</size>
       </method>
-      <method name="System.Object &lt;UnaryIncrement_1&gt;m__42(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIncrement_1&gt;m__43(System.Dynamic.UnaryOperationBinder)">
         <size>47</size>
       </method>
-      <method name="System.Object &lt;UnaryIncrement_2&gt;m__43(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIncrement_2&gt;m__44(System.Dynamic.UnaryOperationBinder)">
         <size>51</size>
       </method>
-      <method name="System.Object &lt;UnaryIsFalse_1&gt;m__44(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsFalse_1&gt;m__45(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="Void &lt;UnaryIsFalse_1&gt;m__45(System.Dynamic.BinaryOperationBinder, System.Object)">
+      <method name="Void &lt;UnaryIsFalse_1&gt;m__46(System.Dynamic.BinaryOperationBinder, System.Object)">
         <size>68</size>
       </method>
-      <method name="System.Object &lt;UnaryIsFalse_2&gt;m__46(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsFalse_2&gt;m__47(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="Void &lt;UnaryIsFalse_2&gt;m__47(System.Dynamic.BinaryOperationBinder, System.Object)">
+      <method name="Void &lt;UnaryIsFalse_2&gt;m__48(System.Dynamic.BinaryOperationBinder, System.Object)">
         <size>68</size>
       </method>
-      <method name="System.Object &lt;UnaryIsFalse_3&gt;m__48(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsFalse_3&gt;m__49(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="Void &lt;UnaryIsFalse_3&gt;m__49(System.Dynamic.BinaryOperationBinder, System.Object)">
+      <method name="Void &lt;UnaryIsFalse_3&gt;m__4A(System.Dynamic.BinaryOperationBinder, System.Object)">
         <size>67</size>
       </method>
-      <method name="System.Object &lt;UnaryIsTrue_1&gt;m__4A(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsTrue_1&gt;m__4B(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="System.Object &lt;UnaryIsTrue_2&gt;m__4B(System.Dynamic.UnaryOperationBinder)">
+      <method name="System.Object &lt;UnaryIsTrue_2&gt;m__4C(System.Dynamic.UnaryOperationBinder)">
         <size>52</size>
       </method>
-      <method name="Void &lt;UnaryIsTrue_2&gt;m__4C(System.Dynamic.BinaryOperationBinder, System.Object)">
+      <method name="Void &lt;UnaryIsTrue_2&gt;m__4D(System.Dynamic.BinaryOperationBinder, System.Object)">
         <size>68</size>
       </method>
-      <method name="Boolean &lt;Main&gt;m__4D(System.Reflection.MethodInfo)">
+      <method name="Boolean &lt;Main&gt;m__4E(System.Reflection.MethodInfo)">
         <size>12</size>
       </method>
-      <method name="System.String &lt;Main&gt;m__4E(System.Reflection.MethodInfo)">
+      <method name="System.String &lt;Main&gt;m__4F(System.Reflection.MethodInfo)">
         <size>7</size>
       </method>
-      <method name="Boolean &lt;Main&gt;m__4F(System.Reflection.MethodInfo)">
+      <method name="Boolean &lt;Main&gt;m__50(System.Reflection.MethodInfo)">
         <size>7</size>
       </method>
-      <method name="Boolean &lt;Main&gt;m__50(Boolean)">
+      <method name="Boolean &lt;Main&gt;m__51(Boolean)">
         <size>5</size>
       </method>
+    </type>
+    <type name="AssertDynamicObject+&lt;GetFakeMetaObject&gt;c__AnonStorey0">
       <method name="Void .ctor()">
         <size>7</size>
       </method>
-      <method name="Void .ctor(Object)">
-        <size>7</size>
-      </method>
-      <method name="Void .cctor()">
-        <size>34</size>
-      </method>
     </type>
-    <type name="Tester+&lt;BinaryAddChecked_2&gt;c__AnonStorey0">
+    <type name="Tester+&lt;BinaryAddChecked_2&gt;c__AnonStorey1">
       <method name="System.Object &lt;&gt;m__A()">
         <size>91</size>
       </method>
         <size>7</size>
       </method>
     </type>
-    <type name="Tester+&lt;GetIndex_3&gt;c__AnonStorey1">
-      <method name="Void &lt;&gt;m__2B(System.Dynamic.GetIndexBinder, System.Object[])">
+    <type name="Tester+&lt;GetIndex_3&gt;c__AnonStorey2">
+      <method name="Void &lt;&gt;m__2C(System.Dynamic.GetIndexBinder, System.Object[])">
         <size>92</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
-    <type name="Tester+&lt;InvokeMember_2&gt;c__AnonStorey2">
-      <method name="Void &lt;&gt;m__33(System.Dynamic.InvokeMemberBinder, System.Object[])">
+    <type name="Tester+&lt;InvokeMember_2&gt;c__AnonStorey3">
+      <method name="Void &lt;&gt;m__34(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>109</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
-    <type name="Tester+&lt;&gt;c__DynamicSite0+Container0">
-      <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
-        <size>0</size>
-      </method>
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;&gt;c__DynamicSite0+Container1">
-      <method name="Void Invoke(System.Runtime.CompilerServices.CallSite, System.Object, Int32 ByRef)">
-        <size>0</size>
-      </method>
-      <method name="Void .ctor(Object, IntPtr)">
-        <size>0</size>
-      </method>
-    </type>
-    <type name="Tester+&lt;InvokeMember_6&gt;c__AnonStorey3">
-      <method name="Void &lt;&gt;m__36(System.Dynamic.InvokeMemberBinder, System.Object[])">
+    <type name="Tester+&lt;InvokeMember_6&gt;c__AnonStorey4">
+      <method name="Void &lt;&gt;m__37(System.Dynamic.InvokeMemberBinder, System.Object[])">
         <size>119</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
     </type>
-    <type name="Tester+&lt;SetIndex_3&gt;c__AnonStorey4">
-      <method name="Void &lt;&gt;m__3A(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
+    <type name="Tester+&lt;SetIndex_3&gt;c__AnonStorey5">
+      <method name="Void &lt;&gt;m__3B(System.Dynamic.SetIndexBinder, System.Object[], System.Object)">
         <size>119</size>
       </method>
       <method name="Void .ctor()">
         <size>16</size>
       </method>
       <method name="Void ConvertExplicitTest()">
-        <size>569</size>
+        <size>502</size>
       </method>
       <method name="Void ConvertExplicitCheckedTest()">
         <size>87</size>
       </method>
     </type>
   </test>
+  <test name="dtest-025.cs">
+    <type name="C">
+      <method name="Int32 Main()">
+        <size>187</size>
+      </method>
+      <method name="Void .ctor()">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="dtest-error-01.cs">
     <type name="Helper">
       <method name="Int32* Foo(Int32)">