Skip to content

Commit 13c1e65

Browse files
monojenkinsBrzVlad
andauthored
[interp] Unwrap RuntimeWrappedException if needed (#32485)
when throwing non exception objects. Enable the entire System.Linq.Expressions suite with interpreter Co-authored-by: Vlad Brezae <[email protected]>
1 parent b74422f commit 13c1e65

File tree

4 files changed

+5
-5
lines changed

4 files changed

+5
-5
lines changed

src/mono/mono/mini/ee.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ typedef gpointer MonoInterpFrameHandle;
3636
MONO_EE_CALLBACK (void, init_delegate, (MonoDelegate *del, MonoError *error)) \
3737
MONO_EE_CALLBACK (void, delegate_ctor, (MonoObjectHandle this_obj, MonoObjectHandle target, gpointer addr, MonoError *error)) \
3838
MONO_EE_CALLBACK (gpointer, get_remoting_invoke, (MonoMethod *method, gpointer imethod, MonoError *error)) \
39-
MONO_EE_CALLBACK (void, set_resume_state, (MonoJitTlsData *jit_tls, MonoException *ex, MonoJitExceptionInfo *ei, MonoInterpFrameHandle interp_frame, gpointer handler_ip)) \
39+
MONO_EE_CALLBACK (void, set_resume_state, (MonoJitTlsData *jit_tls, MonoObject *ex, MonoJitExceptionInfo *ei, MonoInterpFrameHandle interp_frame, gpointer handler_ip)) \
4040
MONO_EE_CALLBACK (void, get_resume_state, (const MonoJitTlsData *jit_tls, gboolean *has_resume_state, MonoInterpFrameHandle *interp_frame, gpointer *handler_ip)) \
4141
MONO_EE_CALLBACK (gboolean, run_finally, (StackFrameInfo *frame, int clause_index, gpointer handler_ip, gpointer handler_ip_end)) \
4242
MONO_EE_CALLBACK (gboolean, run_filter, (StackFrameInfo *frame, MonoException *ex, int clause_index, gpointer handler_ip, gpointer handler_ip_end)) \

src/mono/mono/mini/interp-stubs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ stub_cleanup (void)
104104
}
105105

106106
static void
107-
stub_set_resume_state (MonoJitTlsData *jit_tls, MonoException *ex, MonoJitExceptionInfo *ei, MonoInterpFrameHandle interp_frame, gpointer handler_ip)
107+
stub_set_resume_state (MonoJitTlsData *jit_tls, MonoObject *ex, MonoJitExceptionInfo *ei, MonoInterpFrameHandle interp_frame, gpointer handler_ip)
108108
{
109109
g_assert_not_reached ();
110110
}

src/mono/mono/mini/interp/interp.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7189,7 +7189,7 @@ interp_parse_options (const char *options)
71897189
* Set the state the interpeter will continue to execute from after execution returns to the interpreter.
71907190
*/
71917191
static void
7192-
interp_set_resume_state (MonoJitTlsData *jit_tls, MonoException *ex, MonoJitExceptionInfo *ei, MonoInterpFrameHandle interp_frame, gpointer handler_ip)
7192+
interp_set_resume_state (MonoJitTlsData *jit_tls, MonoObject *ex, MonoJitExceptionInfo *ei, MonoInterpFrameHandle interp_frame, gpointer handler_ip)
71937193
{
71947194
ThreadContext *context;
71957195

@@ -7205,7 +7205,7 @@ interp_set_resume_state (MonoJitTlsData *jit_tls, MonoException *ex, MonoJitExce
72057205
context->exc_gchandle = mono_gchandle_new_internal ((MonoObject*)ex, FALSE);
72067206
/* Ditto */
72077207
if (ei)
7208-
*(MonoException**)(frame_locals (context->handler_frame) + ei->exvar_offset) = ex;
7208+
*(MonoObject**)(frame_locals (context->handler_frame) + ei->exvar_offset) = ex;
72097209
context->handler_ip = (const guint16*)handler_ip;
72107210
}
72117211

src/mono/mono/mini/mini-exceptions.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2941,7 +2941,7 @@ mono_handle_exception_internal (MonoContext *ctx, MonoObject *obj, gboolean resu
29412941
* like the call which transitioned to JITted code has succeeded, but the
29422942
* return value register etc. is not set, so we have to be careful.
29432943
*/
2944-
mini_get_interp_callbacks ()->set_resume_state (jit_tls, mono_ex, ei, frame.interp_frame, ei->handler_start);
2944+
mini_get_interp_callbacks ()->set_resume_state (jit_tls, ex_obj, ei, frame.interp_frame, ei->handler_start);
29452945
/* Undo the IP adjustment done by mono_arch_unwind_frame () */
29462946
/* ip == 0 means an interpreter frame */
29472947
if (MONO_CONTEXT_GET_IP (ctx) != 0)

0 commit comments

Comments
 (0)