Add a test case for #10122.
authorRodrigo Kumpera <kumpera@gmail.com>
Fri, 8 Feb 2013 00:22:04 +0000 (19:22 -0500)
committerRodrigo Kumpera <kumpera@gmail.com>
Fri, 8 Feb 2013 00:22:14 +0000 (19:22 -0500)
mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs

index bcc45a17a23f231f7610e46400120c6d4881fab0..692a7359500622c068f317586d46d5af8814beae 100644 (file)
@@ -11021,6 +11021,57 @@ namespace MonoTests.System.Reflection.Emit
 
                public class Example<T> {
                        public string Field;
+                       public T Field2;
+               }
+
+               [Test]
+               public void Ldfld_Encoding_10122 () {
+                       Build2<Example<int>> ();
+               }
+
+               void Build2<T> () {
+                       var base_class = typeof(T);
+
+               string AssemblyName = genTypeName ();
+               string AssemblyFileName = AssemblyName + ".dll";
+
+                       var assemblyBuilderAccess = AssemblyBuilderAccess.Save;
+                       var assemblyName = new AssemblyName(AssemblyName);
+                       var assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, assemblyBuilderAccess);
+                       var moduleBuilder = assemblyBuilder.DefineDynamicModule(AssemblyName, AssemblyFileName);
+
+
+                       var builder = moduleBuilder.DefineType("Wrapped",
+                TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.Public,
+                base_class);
+
+            var field = builder.BaseType.GetField("Field", BindingFlags.Instance | BindingFlags.Public);
+            
+            var cb = builder.DefineConstructor(
+                MethodAttributes.Public | MethodAttributes.SpecialName,
+                CallingConventions.HasThis,
+                new[] { typeof(string) });
+            
+            var il = cb.GetILGenerator();
+            
+            if (field == null)
+            {
+                throw new InvalidOperationException("wtf");
+            }
+            
+            il.Emit(OpCodes.Ldarg_0);
+            il.Emit(OpCodes.Ldarg_1);
+            il.Emit(OpCodes.Stfld, field);
+            il.Emit(OpCodes.Ret);
+            
+            builder.CreateType();
+
+                       assemblyBuilder.Save (AssemblyFileName);
+
+                       var fromDisk = Assembly.Load (AssemblyName);
+                       Console.WriteLine (fromDisk);
+                       var t = fromDisk.GetType ("Wrapped");
+                       Activator.CreateInstance (t, new object[] { "string"});
                }
 
        }