From 22a4056ecfbb5a5d2bc2db4789af4f4193edfa6a Mon Sep 17 00:00:00 2001 From: Jay Krell Date: Tue, 11 Dec 2018 17:25:39 -0800 Subject: [PATCH] [Coop] Add typechecking to MONO_HANDLE_SETVAL and fix mistakes it finds. (#12021) [Coop] Add typechecking to MONO_HANDLE_SETVAL and fix mistakes it finds. --- mono/metadata/appdomain.c | 2 +- mono/metadata/handle.h | 1 + mono/metadata/sre.c | 2 +- mono/metadata/threads.c | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mono/metadata/appdomain.c b/mono/metadata/appdomain.c index 4015da429d9..72efc910bd5 100644 --- a/mono/metadata/appdomain.c +++ b/mono/metadata/appdomain.c @@ -462,7 +462,7 @@ mono_context_init_checked (MonoDomain *domain, MonoError *error) context = MONO_HANDLE_CAST (MonoAppContext, mono_object_new_pinned_handle (domain, klass, error)); goto_if_nok (error, exit); - MONO_HANDLE_SETVAL (context, domain_id, intptr_t, domain->domain_id); + MONO_HANDLE_SETVAL (context, domain_id, gint32, domain->domain_id); MONO_HANDLE_SETVAL (context, context_id, gint32, 0); mono_threads_register_app_context (context, error); mono_error_assert_ok (error); diff --git a/mono/metadata/handle.h b/mono/metadata/handle.h index d4bcc522438..fb3f48c358e 100644 --- a/mono/metadata/handle.h +++ b/mono/metadata/handle.h @@ -379,6 +379,7 @@ This is why we evaluate index and value before any call to MONO_HANDLE_RAW or ot // but it is not widely enough implemented (i.e. Microsoft C). #define MONO_HANDLE_SETVAL(HANDLE, FIELD, TYPE, VALUE) do { \ TYPE __val = (VALUE); \ + if (0) { TYPE * typecheck G_GNUC_UNUSED = &MONO_HANDLE_SUPPRESS (MONO_HANDLE_RAW (HANDLE)->FIELD); } \ MONO_HANDLE_SUPPRESS (MONO_HANDLE_RAW (MONO_HANDLE_UNSUPPRESS (HANDLE))->FIELD = __val); \ } while (0) diff --git a/mono/metadata/sre.c b/mono/metadata/sre.c index acd470499a8..71e22f6a620 100644 --- a/mono/metadata/sre.c +++ b/mono/metadata/sre.c @@ -2576,7 +2576,7 @@ reflection_setup_internal_class_internal (MonoReflectionTypeBuilderHandle ref_tb goto leave; } - MONO_HANDLE_SETVAL (ref_tb, state, MonoTypeBuilderState, MonoTypeBuilderEntered); + MONO_HANDLE_SETVAL (ref_tb, state, gint32/*MonoTypeBuilderState*/, MonoTypeBuilderEntered); MonoReflectionModuleBuilderHandle module_ref; module_ref = MONO_HANDLE_NEW_GET (MonoReflectionModuleBuilder, ref_tb, module); GHashTable *unparented_classes; diff --git a/mono/metadata/threads.c b/mono/metadata/threads.c index ead3189b585..5c1b50c1288 100644 --- a/mono/metadata/threads.c +++ b/mono/metadata/threads.c @@ -4912,7 +4912,7 @@ mono_thread_execute_interruption (MonoExceptionHandle *pexc) unlock = FALSE; } else if (MONO_HANDLE_GETVAL (thread, thread_interrupt_requested)) { // thread->thread_interrupt_requested = FALSE - MONO_HANDLE_SETVAL (thread, thread_interrupt_requested, gboolean, FALSE); + MONO_HANDLE_SETVAL (thread, thread_interrupt_requested, MonoBoolean, FALSE); unlock_thread_handle (thread); unlock = FALSE; ERROR_DECL (error); -- 2.11.4.GIT