Don't emit reaonly. prefix for reference loads
authorMarek Safar <marek.safar@gmail.com>
Mon, 20 Jun 2011 10:44:19 +0000 (11:44 +0100)
committerMarek Safar <marek.safar@gmail.com>
Mon, 20 Jun 2011 19:43:39 +0000 (20:43 +0100)
mcs/mcs/argument.cs
mcs/tests/test-named-04.cs
mcs/tests/ver-il-net_4_0.xml

index a246066896e4620d9111b3216b0255476038443c..ddc418366a3ac9a2933d2d9061e974992392154f 100644 (file)
@@ -187,7 +187,7 @@ namespace Mono.CSharp
                        var type = Expr.Type;
                        if (IsByRef) {
                                var ml = (IMemoryLocation) Expr;
-                               ml.AddressOf (ec, AddressOp.Load);
+                               ml.AddressOf (ec, AddressOp.LoadStore);
                                type = ReferenceContainer.MakeType (ec.Module, type);
                        } else {
                                Expr.Emit (ec);
index d9336d938b9ed404845024440b021beb32e64c39..f5070ce1660484148bec6cb05026637ae73a8475 100644 (file)
@@ -17,6 +17,16 @@ class Program
 
                b = 500;
        }
+       
+       static void Test<T> (T[] t)
+       {
+               Foo (b: ref t[1], a: t[0]);
+       }
+       
+       static void Foo<T> (T a, ref T b)
+       {
+               b = a;
+       }
 
        public static int Main ()
        {
@@ -37,6 +47,11 @@ class Program
                if (a [2].Foo != 1)
                        return 3;
                
+               var array = new [] { 3, 4 };
+               Test<int>(array);
+               if (array [1] != 3)
+                       return 4;
+
                return 0;
        }
 }
index 988ec3d9d9844186563c80f28b97bffba6fedd85..9897e9d63b41bc0c56dc48bc24d87e70d5d4fee4 100644 (file)
         <size>40</size>
       </method>
       <method name="Int32 Main()">
-        <size>242</size>
+        <size>277</size>
       </method>
       <method name="Void .ctor()">
         <size>7</size>
       </method>
+      <method name="Void Test[T](T[])">
+        <size>22</size>
+      </method>
+      <method name="Void Foo[T](T, T ByRef)">
+        <size>8</size>
+      </method>
     </type>
   </test>
   <test name="test-named-05.cs">