2010-06-17 Geoff Norton <gnorton@novell.com>
[mono.git] / mono / tests / bug-462592.cs
blobe639ecacccbcad8c01478ceaaa30ef9df555fc08
1 using System;
2 using System.Threading;
3 using System.Reflection;
4 using System.Reflection.Emit;
6 public class Test
8 public virtual void Foo<T> (int i)
13 class Driver
15 static AssemblyBuilder assembly;
16 static ModuleBuilder module;
17 static string ASSEMBLY_NAME = "MonoTests.System.Reflection.Emit.TypeBuilderTest";
19 static void SetUp ()
21 AssemblyName assemblyName = new AssemblyName ();
22 assemblyName.Name = ASSEMBLY_NAME;
24 assembly =
25 Thread.GetDomain ().DefineDynamicAssembly (
26 assemblyName, AssemblyBuilderAccess.RunAndSave, ".");
28 module = assembly.DefineDynamicModule ("repro", "bug-462592-result.exe");
31 static int Main()
33 SetUp ();
35 MethodInfo foo = typeof (Test).GetMethod ("Foo");
36 TypeBuilder type = module.DefineType ("TestType", TypeAttributes.Public, typeof (Test), Type.EmptyTypes);
38 MethodBuilder mb = type.DefineMethod ("Foo", MethodAttributes.Public | MethodAttributes.Virtual, typeof (void), new Type[] { typeof (int) });
39 mb.DefineGenericParameters ("T");
41 ILGenerator il = mb.GetILGenerator ();
42 il.Emit (OpCodes.Ldarg_0);
43 il.Emit (OpCodes.Ldc_I4, 0);
44 il.Emit (OpCodes.Call, foo);
45 il.Emit (OpCodes.Ret);
47 type.DefineMethodOverride (mb, foo);
49 MethodBuilder main = type.DefineMethod ("Main", MethodAttributes.Public | MethodAttributes.Static, typeof (void), Type.EmptyTypes);
50 il = main.GetILGenerator ();
51 il.Emit (OpCodes.Newobj, type.DefineDefaultConstructor (MethodAttributes.Public));
52 il.Emit (OpCodes.Ldc_I4, 0);
53 il.Emit (OpCodes.Callvirt, mb.MakeGenericMethod (new Type[] { typeof (string) }));
54 il.Emit (OpCodes.Ret);
56 type.CreateType ();
57 assembly.SetEntryPoint (main);
59 assembly.Save ("bug-462592-result.exe");
61 Assembly res = Assembly.LoadFrom ("bug-462592-result.exe");
62 res.EntryPoint.Invoke (null, new object[0]);
63 return 0;