Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoltan Varga <vargaz@gmail.com>2016-09-06 03:21:38 +0300
committerZoltan Varga <vargaz@gmail.com>2016-09-07 00:32:54 +0300
commit51a3c93f67949bb1c277b9cb33a48c220bf1307f (patch)
treef14e28db279f613662ba7e1ba056d573e5d96d67
parentc25829a70c129d39312d16ff373550727e533fe5 (diff)
[jit] Unify the handling of 'error' and 'exc' in the llvm-only and non llvm-only runtime invoke code. Fixes #41961.
-rw-r--r--mono/mini/mini-runtime.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/mono/mini/mini-runtime.c b/mono/mini/mini-runtime.c
index a75d92eccca..c2c641f9803 100644
--- a/mono/mini/mini-runtime.c
+++ b/mono/mini/mini-runtime.c
@@ -2349,7 +2349,7 @@ mono_llvmonly_runtime_invoke (MonoMethod *method, RuntimeInvokeInfo *info, void
runtime_invoke (NULL, args, exc, info->compiled_method);
if (exc && *exc)
- mono_error_set_exception_instance (error, (MonoException*) *exc);
+ return NULL;
if (sig->ret->type != MONO_TYPE_VOID && info->ret_box_class)
return mono_value_box_checked (domain, info->ret_box_class, retval, error);
@@ -2533,12 +2533,17 @@ mono_jit_runtime_invoke (MonoMethod *method, void *obj, void **params, MonoObjec
}
#endif
- if (mono_llvm_only)
- return mono_llvmonly_runtime_invoke (method, info, obj, params, exc, error);
+ MonoObject *result;
- runtime_invoke = (MonoObject *(*)(MonoObject *, void **, MonoObject **, void *))info->runtime_invoke;
+ if (mono_llvm_only) {
+ result = mono_llvmonly_runtime_invoke (method, info, obj, params, exc, error);
+ if (!is_ok (error))
+ return NULL;
+ } else {
+ runtime_invoke = (MonoObject *(*)(MonoObject *, void **, MonoObject **, void *))info->runtime_invoke;
- MonoObject *result = runtime_invoke ((MonoObject *)obj, params, exc, info->compiled_method);
+ result = runtime_invoke ((MonoObject *)obj, params, exc, info->compiled_method);
+ }
if (catchExcInMonoError && *exc != NULL)
mono_error_set_exception_instance (error, (MonoException*) *exc);
return result;