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:
authorBernhard Urban <bernhard.urban@xamarin.com>2018-11-05 21:15:29 +0300
committermonojenkins <jo.shields+jenkins@xamarin.com>2018-11-05 21:15:29 +0300
commit9772a0868ae69bab915946d7acff8c1563bde22e (patch)
treeebb08497e732fac61872be423faedee622d3c189
parent2fd171c4f9d08d0f96917cb85d071071dcaa57ed (diff)
[interp] transform delegate invoke in method body too (#11528)
[interp] transform delegate invoke in method body too
-rw-r--r--mono/mini/interp/transform.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/mono/mini/interp/transform.c b/mono/mini/interp/transform.c
index bf4294bca56..7171de75bc6 100644
--- a/mono/mini/interp/transform.c
+++ b/mono/mini/interp/transform.c
@@ -5129,12 +5129,13 @@ mono_interp_transform_method (InterpMethod *imethod, ThreadContext *context, Mon
g_free (wrapper_name);
} else if (*name == 'I' && (strcmp (name, "Invoke") == 0)) {
/*
- * Handled when transforming caller.
- *
- * FIXME Resolve other calls in interp_transform_call instead of here
- * since changing the called method on the spot might trigger issues
+ * Usually handled during transformation of the caller, but
+ * when the caller is handled by another execution engine
+ * (for example fullAOT) we need to handle it here. That's
+ * known to be wrong in cases where the reference to
+ * `MonoDelegate` would be needed (FIXME).
*/
- g_assert_not_reached ();
+ nm = mono_marshal_get_delegate_invoke (method, NULL);
} else if (*name == 'B' && (strcmp (name, "BeginInvoke") == 0)) {
nm = mono_marshal_get_delegate_begin_invoke (method);
} else if (*name == 'E' && (strcmp (name, "EndInvoke") == 0)) {