MonoMethodSignature *fsig;
if (method->wrapper_type != MONO_WRAPPER_NONE) {
- MonoError error;
-
fsig = (MonoMethodSignature *)mono_method_get_wrapper_data (method, token);
- if (context) {
- fsig = mono_inflate_generic_signature (fsig, context, &error);
- // FIXME:
- g_assert (mono_error_ok (&error));
- }
} else {
fsig = mono_metadata_parse_signature (method->klass->image, token);
}
+ if (context) {
+ MonoError error;
+ fsig = mono_inflate_generic_signature(fsig, context, &error);
+ // FIXME:
+ g_assert(mono_error_ok(&error));
+ }
return fsig;
}
--- /dev/null
+//Tests ldftn and calli with generic return signature
+
+.assembly extern mscorlib{}
+.assembly someTest{}
+.module someTest
+
+.class public auto ansi beforefieldinit Test`1<T>
+ extends [mscorlib]System.Object
+{
+ // method line 1
+ .method public hidebysig
+ static default void test (native int ptr) cil managed
+ {
+ .maxstack 8
+ ldarg ptr
+ calli !T()
+ call void class [mscorlib]System.Console::WriteLine(int32)
+ ret
+ }
+}
+
+.class private auto ansi someTest
+ extends [mscorlib]System.Object {
+
+ .method public static void go() cil managed {
+ .entrypoint
+
+ ldftn int32 [mscorlib]System.Environment::get_ProcessorCount()
+ call void class Test`1<int32>::test(native int)
+ ret
+ }
+}
\ No newline at end of file