[test] Test SRE of a class with two fields with same name
authorAleksey Kliger <aleksey@xamarin.com>
Thu, 8 Jun 2017 20:11:14 +0000 (16:11 -0400)
committerAleksey Kliger <aleksey@xamarin.com>
Thu, 8 Jun 2017 20:13:56 +0000 (16:13 -0400)
Regression test for https://bugzilla.xamarin.com/show_bug.cgi?id=57222

mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs

index f66c6c1ee4bc5ca557a046389594609be2c324fd..56eef2e51c9db31071ff20cdf643787b1c187bd7 100644 (file)
@@ -11306,5 +11306,63 @@ namespace MonoTests.System.Reflection.Emit
 
                        Assert.AreSame (buildX, defX);
                }
+
+               [Test]
+               public void FieldsWithSameName () {
+                       // Regression test for https://bugzilla.xamarin.com/show_bug.cgi?id=57222
+                       string fileName = CreateTempAssembly ();
+
+                       var assemblyName = new AssemblyName { Name = "test" };
+                       var dynamicAssembly = AssemblyBuilder.DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.RunAndSave);
+                       var dynamicModule = dynamicAssembly.DefineDynamicModule (assemblyName.Name, fileName);
+                       var typeBuilder = dynamicModule.DefineType ("type1", TypeAttributes.Public | TypeAttributes.Class);
+
+                       var mainMethod = typeBuilder.DefineMethod ("Main", MethodAttributes.Public | MethodAttributes.Static, typeof (int), new Type[0]);
+                       var mainMethodIl = mainMethod.GetILGenerator ();
+
+                       var f1 = typeBuilder.DefineField ("x", typeof (byte), FieldAttributes.Private | FieldAttributes.Static);
+                       var f2 = typeBuilder.DefineField ("x", typeof (sbyte), FieldAttributes.Private | FieldAttributes.Static);
+
+                       mainMethodIl.Emit (OpCodes.Ldsflda, f1);
+                       mainMethodIl.Emit (OpCodes.Ldsflda, f2);
+                       mainMethodIl.Emit (OpCodes.Pop);
+                       mainMethodIl.Emit (OpCodes.Pop);
+                       mainMethodIl.Emit (OpCodes.Ldc_I4_0);
+                       mainMethodIl.Emit (OpCodes.Ret);
+
+                       typeBuilder.CreateType ();
+                       dynamicAssembly.SetEntryPoint (mainMethod);
+
+                       dynamicAssembly.Save (fileName);
+               }
+               [Test]
+               public void FieldsWithSameNameAndType () {
+                       // https://bugzilla.xamarin.com/show_bug.cgi?id=57222
+                       string fileName = CreateTempAssembly ();
+
+                       var assemblyName = new AssemblyName { Name = "test" };
+                       var dynamicAssembly = AssemblyBuilder.DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.RunAndSave);
+                       var dynamicModule = dynamicAssembly.DefineDynamicModule (assemblyName.Name, fileName);
+                       var typeBuilder = dynamicModule.DefineType ("type1", TypeAttributes.Public | TypeAttributes.Class);
+
+                       var mainMethod = typeBuilder.DefineMethod ("Main", MethodAttributes.Public | MethodAttributes.Static, typeof (int), new Type[0]);
+                       var mainMethodIl = mainMethod.GetILGenerator ();
+
+                       var f1 = typeBuilder.DefineField ("x", typeof (sbyte), FieldAttributes.Private | FieldAttributes.Static);
+                       var f2 = typeBuilder.DefineField ("x", typeof (sbyte), FieldAttributes.Private | FieldAttributes.Static);
+
+                       mainMethodIl.Emit (OpCodes.Ldsflda, f1);
+                       mainMethodIl.Emit (OpCodes.Ldsflda, f2);
+                       mainMethodIl.Emit (OpCodes.Pop);
+                       mainMethodIl.Emit (OpCodes.Pop);
+                       mainMethodIl.Emit (OpCodes.Ldc_I4_0);
+                       mainMethodIl.Emit (OpCodes.Ret);
+
+                       typeBuilder.CreateType ();
+                       dynamicAssembly.SetEntryPoint (mainMethod);
+
+                       dynamicAssembly.Save (fileName);
+               }
+
        }
 }