[interp] box IntPtr on return of runtime_invoke
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 9177fa3a4bc5261d12b80a3069caddca0a5912af..b7332b8cc8562e1bcb8fee7822ecdbe8062e78e3 100644 (file)
@@ -1281,10 +1281,14 @@ mono_interp_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoOb
                break;
        case MONO_TYPE_VALUETYPE:
                retval = mono_object_new_checked (context->domain, klass, error);
-               ret = ((char*)retval) + sizeof (MonoObject);
+               ret = mono_object_unbox (retval);
                if (!sig->ret->data.klass->enumtype)
                        result.data.vt = ret;
                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);
@@ -1338,6 +1342,7 @@ handle_enum:
                        }
                        break;
                case MONO_TYPE_STRING:
+               case MONO_TYPE_PTR:
                case MONO_TYPE_CLASS:
                case MONO_TYPE_ARRAY:
                case MONO_TYPE_SZARRAY: