From 6b1529a15c8ef9af182fcef82c327eaa966229f9 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Thu, 8 Jun 2017 16:11:14 -0400 Subject: [PATCH] [test] Test SRE of a class with two fields with same name Regression test for https://bugzilla.xamarin.com/show_bug.cgi?id=57222 --- .../System.Reflection.Emit/TypeBuilderTest.cs | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs b/mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs index f66c6c1ee4b..56eef2e51c9 100644 --- a/mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs +++ b/mcs/class/corlib/Test/System.Reflection.Emit/TypeBuilderTest.cs @@ -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); + } + } } -- 2.25.1