[Mono-bugs] [Bug 652952] New: MakeGenericMethod does not work on generic type definitions

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Thu Nov 11 08:31:20 EST 2010


https://bugzilla.novell.com/show_bug.cgi?id=652952

https://bugzilla.novell.com/show_bug.cgi?id=652952#c0


           Summary: MakeGenericMethod does not work on generic type
                    definitions
    Classification: Mono
           Product: Mono: Class Libraries
           Version: SVN
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: CORLIB
        AssignedTo: rkumpera at novell.com
        ReportedBy: msafar at novell.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---


Compile & Run

using System;
using System.Reflection;
using System.Reflection.Emit;

class Program
{
    static void Main ()
    {
        AssemblyName asmname = new AssemblyName ();
        asmname.Name = "sre";
        AssemblyBuilder asmbuild = System.Threading.Thread.GetDomain
().DefineDynamicAssembly (asmname, AssemblyBuilderAccess.RunAndSave);
        ModuleBuilder modbuild = asmbuild.DefineDynamicModule ("modulename",
"sre.exe");

        TypeBuilder myType = modbuild.DefineType ("Sample",
TypeAttributes.Public);
        var tp = myType.DefineGenericParameters ("T");

        var m_a = myType.DefineMethod ("MethodA", MethodAttributes.Public);
        var m_a_targ = m_a.DefineGenericParameters ("TA");

        var m_b = myType.DefineMethod ("Methodb", MethodAttributes.Public);
        m_b.DefineGenericParameters ("TB");

        var ilgen = m_a.GetILGenerator ();
        ilgen.Emit (OpCodes.Ldarg_0);
        ilgen.Emit (OpCodes.Call, m_b.MakeGenericMethod (m_a_targ));
        ilgen.Emit (OpCodes.Ret);

        ilgen = m_b.GetILGenerator ();
        ilgen.Emit (OpCodes.Ret);

        myType.CreateType ();

        asmbuild.Save ("sre.exe");

        return;
    }
}

Mono produces invalid call

call instance void class Sample::Methodb<!!0> ()

instead of

call instance void class Sample<!T>::Methodb<!!0> ()

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the mono-bugs mailing list