diff options
author | Bernhard Urban <bernhard.urban@xamarin.com> | 2018-11-05 21:15:29 +0300 |
---|---|---|
committer | monojenkins <jo.shields+jenkins@xamarin.com> | 2018-11-05 21:15:29 +0300 |
commit | 9772a0868ae69bab915946d7acff8c1563bde22e (patch) | |
tree | ebb08497e732fac61872be423faedee622d3c189 | |
parent | 2fd171c4f9d08d0f96917cb85d071071dcaa57ed (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.c | 11 |
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)) { |