[mini] Set pending MonoError in mono_vcall_trampoline (#3107)
authorAleksey Kliger (λgeek) <akliger@gmail.com>
Sat, 4 Jun 2016 09:02:48 +0000 (05:02 -0400)
committerZoltan Varga <vargaz@gmail.com>
Sat, 4 Jun 2016 09:02:48 +0000 (05:02 -0400)
mono/mini/mini-trampolines.c

index 12e0fd97758e71fe85d2534e59d4afc140a07a8b..68b5a8b0a47b5efbfa8421bb212c0f8d014e905a 100644 (file)
@@ -876,7 +876,8 @@ mono_vcall_trampoline (mgreg_t *regs, guint8 *code, int slot, guint8 *tramp)
 
                /* Avoid loading metadata or creating a generic vtable if possible */
                addr = mono_aot_get_method_from_vt_slot (mono_domain_get (), vt, slot, &error);
-               mono_error_raise_exception (&error); /* FIXME don't raise here */
+               if (!is_ok (&error))
+                       goto leave;
                if (addr && !vt->klass->valuetype) {
                        if (mono_domain_owns_vtable_slot (mono_domain_get (), vtable_slot))
                                *vtable_slot = addr;
@@ -906,6 +907,7 @@ mono_vcall_trampoline (mgreg_t *regs, guint8 *code, int slot, guint8 *tramp)
        }
 
        res = common_call_trampoline (regs, code, m, vt, vtable_slot, &error);
+leave:
        if (!mono_error_ok (&error)) {
                mono_error_set_pending_exception (&error);
                return NULL;