Flag a field as used when used as an extension method argument. Fixes #6159
authorMarek Safar <marek.safar@gmail.com>
Mon, 23 Jul 2012 09:24:03 +0000 (10:24 +0100)
committerMarek Safar <marek.safar@gmail.com>
Mon, 23 Jul 2012 09:25:12 +0000 (10:25 +0100)
mcs/mcs/ecore.cs
mcs/tests/gtest-exmethod-44.cs [new file with mode: 0644]
mcs/tests/ver-il-net_4_5.xml

index 4f38d9799b0215077dbd2947bfadca1ed098f724..cfc8499ec39c3e4ff4613a9829056e5b61b31cbe 100644 (file)
@@ -3183,8 +3183,12 @@ namespace Mono.CSharp {
                        }
 
                        var me = ExtensionExpression as MemberExpr;
-                       if (me != null)
+                       if (me != null) {
                                me.ResolveInstanceExpression (ec, null);
+                               var fe = me as FieldExpr;
+                               if (fe != null)
+                                       fe.Spec.MemberDefinition.SetIsUsed ();
+                       }
 
                        InstanceExpression = null;
                        return this;
diff --git a/mcs/tests/gtest-exmethod-44.cs b/mcs/tests/gtest-exmethod-44.cs
new file mode 100644 (file)
index 0000000..970902f
--- /dev/null
@@ -0,0 +1,21 @@
+// Compiler options: -warnaserror
+
+using System;
+using System.Linq;
+
+namespace UnusedFieldWarningTest2
+{
+       class Repro
+       {
+               int[] a = new int[] { 1 };
+               
+               void Foo ()
+               {
+                       Console.Write (a.FirstOrDefault ());
+               }
+
+               static void Main ()
+               {
+               }
+       }
+}
\ No newline at end of file
index e8298c1155d1fafa987517242e023ba98ef0293e..4a410d3055c438e10650791d77be5ccd30f232bc 100644 (file)
       </method>\r
     </type>\r
   </test>\r
+  <test name="gtest-exmethod-44.cs">\r
+    <type name="UnusedFieldWarningTest2.Repro">\r
+      <method name="Void Foo()" attrs="129">\r
+        <size>18</size>\r
+      </method>\r
+      <method name="Void Main()" attrs="145">\r
+        <size>2</size>\r
+      </method>\r
+      <method name="Void .ctor()" attrs="6278">\r
+        <size>23</size>\r
+      </method>\r
+    </type>\r
+  </test>\r
   <test name="gtest-fixedbuffer-01.cs">\r
     <type name="TestNew">\r
       <method name="Void SetTest()" attrs="134">\r