[interp] allocate storage for value types in runtime_invoke
[mono.git] / mono / mini / interp / interp.c
index f99e931c895553b41f0ccf1f00aa5c751dd05050..be96452e8e577658999871b4186947c971439dce 100644 (file)
@@ -1284,6 +1284,8 @@ mono_interp_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoOb
                ret = mono_object_unbox (retval);
                if (!sig->ret->data.klass->enumtype)
                        result.data.vt = ret;
+               else
+                       result.data.vt = alloca (mono_class_instance_size (klass));
                break;
        case MONO_TYPE_GENERICINST:
                if (!MONO_TYPE_IS_REFERENCE (sig->ret)) {
@@ -1291,6 +1293,8 @@ mono_interp_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoOb
                        ret = mono_object_unbox (retval);
                        if (!sig->ret->data.klass->enumtype)
                                result.data.vt = ret;
+                       else
+                               result.data.vt = alloca (mono_class_instance_size (klass));
                } else {
                        isobject = 1;
                }