[Mono-dev] Trouble with delegate ctors on generic sharing

Mark Probst mark.probst at gmail.com
Fri Sep 19 14:00:42 EDT 2008


The attached program triggers the following bug when generic sharing is

The call to the delegate constructor in makeDel() needs to look up the
constructor in the RGCTX, because the delegate type is a generic for
which code cannot be shared in the general case (because its type
argument is a value type).  Then the constructor method is invoked via
an indirect call.

The constructor is a runtime method, so mono_jit_compile_method_inner()
doesn't actually compile it but returns a trampoline for an icall
wrapper.  When that trampoline is processed by mono_magic_trampoline()
the code calling the trampoline is supposed to be patched, which is
impossible in this case and we hit a failed assertion in

What do we do about this?  I don't see how I can figure out the
circumstances in mono_magic_trampoline().  IMHO mono_compile_method()
should always return method code, never trampoline code.  Another
possibility would be to detect the issue in instantiate_other_info()
(metadata/generic-sharing.c), but I don't know how I could handle it
there, since the trampoline is opaque for metadata.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: generic-delegate-ctor.2.cs
Type: text/x-csharp
Size: 390 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20080919/fdc79d6f/attachment.bin 

More information about the Mono-devel-list mailing list