[interp] treat GENERICINST properly on runtime_invoke return
authorBernhard Urban <bernhard.urban@xamarin.com>
Fri, 17 Mar 2017 16:02:02 +0000 (17:02 +0100)
committerBernhard Urban <bernhard.urban@xamarin.com>
Sat, 18 Mar 2017 18:31:49 +0000 (19:31 +0100)
mono/mini/interp/interp.c

index b7332b8cc8562e1bcb8fee7822ecdbe8062e78e3..f99e931c895553b41f0ccf1f00aa5c751dd05050 100644 (file)
@@ -1285,13 +1285,24 @@ mono_interp_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoOb
                if (!sig->ret->data.klass->enumtype)
                        result.data.vt = ret;
                break;
+       case MONO_TYPE_GENERICINST:
+               if (!MONO_TYPE_IS_REFERENCE (sig->ret)) {
+                       retval = mono_object_new_checked (context->domain, klass, error);
+                       ret = mono_object_unbox (retval);
+                       if (!sig->ret->data.klass->enumtype)
+                               result.data.vt = ret;
+               } else {
+                       isobject = 1;
+               }
+               break;
+
        case MONO_TYPE_PTR:
                retval = mono_object_new_checked (context->domain, mono_defaults.int_class, error);
                ret = mono_object_unbox (retval);
                break;
        default:
                retval = mono_object_new_checked (context->domain, klass, error);
-               ret = ((char*)retval) + sizeof (MonoObject);
+               ret = mono_object_unbox (retval);
                break;
        }