Set field usage in resolve to accommodate for expression trees. Fixes #6119
authorMarek Safar <marek.safar@gmail.com>
Mon, 16 Jul 2012 12:13:32 +0000 (13:13 +0100)
committerMarek Safar <marek.safar@gmail.com>
Mon, 16 Jul 2012 12:16:12 +0000 (13:16 +0100)
mcs/mcs/ecore.cs
mcs/tests/gtest-etree-28.cs [new file with mode: 0644]
mcs/tests/ver-il-net_4_5.xml

index 6099dab5066ee049290b81f5fe5745f4d5d17b78..88148499871927abc8c57cdbcc9966e16a0fa047 100644 (file)
@@ -5333,6 +5333,8 @@ namespace Mono.CSharp {
 
                protected override Expression DoResolve (ResolveContext ec)
                {
+                       spec.MemberDefinition.SetIsUsed ();
+
                        return DoResolve (ec, null);
                }
 
@@ -5552,8 +5554,6 @@ namespace Mono.CSharp {
                {
                        bool is_volatile = (spec.Modifiers & Modifiers.VOLATILE) != 0;
 
-                       spec.MemberDefinition.SetIsUsed ();
-                       
                        if (IsStatic){
                                if (is_volatile)
                                        ec.Emit (OpCodes.Volatile);
diff --git a/mcs/tests/gtest-etree-28.cs b/mcs/tests/gtest-etree-28.cs
new file mode 100644 (file)
index 0000000..21b22c7
--- /dev/null
@@ -0,0 +1,22 @@
+// Compiler options: -warnaserror
+
+using System;
+using System.Linq.Expressions;
+
+class Repro
+{
+       int i = 2;
+
+       void UseField ()
+       {
+               TakeExpression (() => Console.Write (i));
+       }
+
+       void TakeExpression (Expression<Action> expr)
+       {
+       }
+
+       public static void Main ()
+       {
+       }
+}
index 67ac72aebb8a3ffe2f3169181c05f6c506d0d349..c2137b1736a0a792775d825122e500abfa4d8529 100644 (file)
       </method>\r
     </type>\r
   </test>\r
+  <test name="gtest-etree-28.cs">\r
+    <type name="Repro">\r
+      <method name="Void UseField()" attrs="129">\r
+        <size>70</size>\r
+      </method>\r
+      <method name="Void TakeExpression(System.Linq.Expressions.Expression`1[System.Action])" attrs="129">\r
+        <size>2</size>\r
+      </method>\r
+      <method name="Void Main()" attrs="150">\r
+        <size>2</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>14</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="gtest-exmethod-01.cs">\r
     <type name="SimpleTest">\r
       <method name="System.String Prefix(System.String, System.String)" attrs="150">\r