From 99261eb4889ac17ad2f49dc3865261f8fd930d3f Mon Sep 17 00:00:00 2001 From: Manuel de la Pena Date: Wed, 13 Nov 2019 16:46:13 -0500 Subject: [PATCH 1/4] [Runtime] Enable the -Wsign-conversion on trampilines-varargs files. Enable the flag that was disabled via pragmas. Continuation of PR: https://github.com/xamarin/xamarin-macios/pull/7405 --- runtime/trampolines-varargs.h | 2 +- runtime/trampolines-varargs.m | 26 ++++++++++---------------- runtime/xamarin/trampolines.h | 4 ++-- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/runtime/trampolines-varargs.h b/runtime/trampolines-varargs.h index 1dc2f093f93d..d8aa46164d95 100644 --- a/runtime/trampolines-varargs.h +++ b/runtime/trampolines-varargs.h @@ -16,7 +16,7 @@ struct XamarinCallState { union { // floating point return value double double_ret; float float_ret; - long long longlong_ret; + uint64_t ulonglong_ret; void *ptr_ret; }; }; diff --git a/runtime/trampolines-varargs.m b/runtime/trampolines-varargs.m index f2d6e110179a..0d46a332d9f1 100644 --- a/runtime/trampolines-varargs.m +++ b/runtime/trampolines-varargs.m @@ -1,7 +1,3 @@ -// TODO: temp ignore to minimize diff -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wsign-conversion" - #if !defined (__i386__) && !defined (__x86_64__) && !(defined (__arm64__) && !defined(__ILP32__)) #define __VARARGS_TRAMPOLINES__ 1 #endif @@ -26,9 +22,9 @@ static void dump_state (struct XamarinCallState *state) { - PRINT ("type: %u is_stret: %i self: %p SEL: %s -- double_ret: %f float_ret: %f longlong_ret: %llu ptr_ret: %p\n", + PRINT ("type: %u is_stret: %i self: %p SEL: %s -- double_ret: %f float_ret: %f ulonglong_ret: %llu ptr_ret: %p\n", state->type, (state->type & Tramp_Stret) == Tramp_Stret, state->self, sel_getName (state->sel), - state->double_ret, state->float_ret, state->longlong_ret, state->ptr_ret); + state->double_ret, state->float_ret, state->ulonglong_ret, state->ptr_ret); } #else #define dump_state(...) @@ -107,8 +103,8 @@ if (size <= sizeof (void *)) { state->ptr_ret = *(void **) mono_object_unbox (value); } else if (size <= 8) { - state->longlong_ret = 0; - memcpy (&state->longlong_ret + 8 - size, mono_object_unbox (value), size); + state->ulonglong_ret = 0; + memcpy (&state->ulonglong_ret + 8 - size, mono_object_unbox (value), size); } else { *exception_gchandle = xamarin_create_mt_exception (xamarin_strdup_printf ("Xamarin.iOS: Cannot marshal struct return type %s (size: %i)\n", type, (int) size)); } @@ -132,7 +128,7 @@ case _C_ULNG: case _C_LNG_LNG: case _C_ULNG_LNG: - state->longlong_ret = *(uint64_t *) mono_object_unbox (value); + state->ulonglong_ret = *(uint64_t *) mono_object_unbox (value); break; // For pointer types we get the value itself. @@ -199,7 +195,7 @@ return state.float_ret; } -long long +unsigned long long xamarin_longret_trampoline (id self, SEL sel, ...) { struct XamarinCallState state; @@ -210,7 +206,7 @@ va_start (state.ap, sel); xamarin_varargs_trampoline (&state); va_end (state.ap); - return state.longlong_ret; + return state.ulonglong_ret; } void @@ -296,7 +292,7 @@ return state.double_ret; } -long long +unsigned long long xamarin_static_longret_trampoline (id self, SEL sel, ...) { struct XamarinCallState state; @@ -307,7 +303,7 @@ va_start (state.ap, sel); xamarin_varargs_trampoline (&state); va_end (state.ap); - return state.longlong_ret; + return state.ulonglong_ret; } void @@ -323,6 +319,4 @@ va_end (state.ap); } -#endif /* __VARARGS_TRAMPOLINES__ */ - -#pragma clang diagnostic pop +#endif /* __VARARGS_TRAMPOLINES__ */ \ No newline at end of file diff --git a/runtime/xamarin/trampolines.h b/runtime/xamarin/trampolines.h index 841f547794f8..27ecd140a289 100644 --- a/runtime/xamarin/trampolines.h +++ b/runtime/xamarin/trampolines.h @@ -28,8 +28,8 @@ float xamarin_static_fpret_single_trampoline (id self, SEL sel, ...); double xamarin_static_fpret_double_trampoline (id self, SEL sel, ...); void xamarin_static_stret_trampoline (void *buffer, id self, SEL sel, ...); void xamarin_static_x86_double_abi_stret_trampoline (); -long long xamarin_longret_trampoline (id self, SEL sel, ...); -long long xamarin_static_longret_trampoline (id self, SEL sel, ...); +unsigned long long xamarin_longret_trampoline (id self, SEL sel, ...); +unsigned long long xamarin_static_longret_trampoline (id self, SEL sel, ...); id xamarin_copyWithZone_trampoline1 (id self, SEL sel, NSZone *zone); id xamarin_copyWithZone_trampoline2 (id self, SEL sel, NSZone *zone); int xamarin_get_gchandle_trampoline (id self, SEL sel); From 12530b99265d22d7cf3f29e7d2f004292475e8e5 Mon Sep 17 00:00:00 2001 From: Manuel de la Pena Date: Thu, 14 Nov 2019 10:29:50 -0500 Subject: [PATCH 2/4] Revert "[Runtime] Enable the -Wsign-conversion on trampilines-varargs files." This reverts commit 99261eb4889ac17ad2f49dc3865261f8fd930d3f. --- runtime/trampolines-varargs.h | 2 +- runtime/trampolines-varargs.m | 26 ++++++++++++++++---------- runtime/xamarin/trampolines.h | 4 ++-- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/runtime/trampolines-varargs.h b/runtime/trampolines-varargs.h index d8aa46164d95..1dc2f093f93d 100644 --- a/runtime/trampolines-varargs.h +++ b/runtime/trampolines-varargs.h @@ -16,7 +16,7 @@ struct XamarinCallState { union { // floating point return value double double_ret; float float_ret; - uint64_t ulonglong_ret; + long long longlong_ret; void *ptr_ret; }; }; diff --git a/runtime/trampolines-varargs.m b/runtime/trampolines-varargs.m index 0d46a332d9f1..f2d6e110179a 100644 --- a/runtime/trampolines-varargs.m +++ b/runtime/trampolines-varargs.m @@ -1,3 +1,7 @@ +// TODO: temp ignore to minimize diff +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-conversion" + #if !defined (__i386__) && !defined (__x86_64__) && !(defined (__arm64__) && !defined(__ILP32__)) #define __VARARGS_TRAMPOLINES__ 1 #endif @@ -22,9 +26,9 @@ static void dump_state (struct XamarinCallState *state) { - PRINT ("type: %u is_stret: %i self: %p SEL: %s -- double_ret: %f float_ret: %f ulonglong_ret: %llu ptr_ret: %p\n", + PRINT ("type: %u is_stret: %i self: %p SEL: %s -- double_ret: %f float_ret: %f longlong_ret: %llu ptr_ret: %p\n", state->type, (state->type & Tramp_Stret) == Tramp_Stret, state->self, sel_getName (state->sel), - state->double_ret, state->float_ret, state->ulonglong_ret, state->ptr_ret); + state->double_ret, state->float_ret, state->longlong_ret, state->ptr_ret); } #else #define dump_state(...) @@ -103,8 +107,8 @@ if (size <= sizeof (void *)) { state->ptr_ret = *(void **) mono_object_unbox (value); } else if (size <= 8) { - state->ulonglong_ret = 0; - memcpy (&state->ulonglong_ret + 8 - size, mono_object_unbox (value), size); + state->longlong_ret = 0; + memcpy (&state->longlong_ret + 8 - size, mono_object_unbox (value), size); } else { *exception_gchandle = xamarin_create_mt_exception (xamarin_strdup_printf ("Xamarin.iOS: Cannot marshal struct return type %s (size: %i)\n", type, (int) size)); } @@ -128,7 +132,7 @@ case _C_ULNG: case _C_LNG_LNG: case _C_ULNG_LNG: - state->ulonglong_ret = *(uint64_t *) mono_object_unbox (value); + state->longlong_ret = *(uint64_t *) mono_object_unbox (value); break; // For pointer types we get the value itself. @@ -195,7 +199,7 @@ return state.float_ret; } -unsigned long long +long long xamarin_longret_trampoline (id self, SEL sel, ...) { struct XamarinCallState state; @@ -206,7 +210,7 @@ va_start (state.ap, sel); xamarin_varargs_trampoline (&state); va_end (state.ap); - return state.ulonglong_ret; + return state.longlong_ret; } void @@ -292,7 +296,7 @@ return state.double_ret; } -unsigned long long +long long xamarin_static_longret_trampoline (id self, SEL sel, ...) { struct XamarinCallState state; @@ -303,7 +307,7 @@ va_start (state.ap, sel); xamarin_varargs_trampoline (&state); va_end (state.ap); - return state.ulonglong_ret; + return state.longlong_ret; } void @@ -319,4 +323,6 @@ va_end (state.ap); } -#endif /* __VARARGS_TRAMPOLINES__ */ \ No newline at end of file +#endif /* __VARARGS_TRAMPOLINES__ */ + +#pragma clang diagnostic pop diff --git a/runtime/xamarin/trampolines.h b/runtime/xamarin/trampolines.h index 27ecd140a289..841f547794f8 100644 --- a/runtime/xamarin/trampolines.h +++ b/runtime/xamarin/trampolines.h @@ -28,8 +28,8 @@ float xamarin_static_fpret_single_trampoline (id self, SEL sel, ...); double xamarin_static_fpret_double_trampoline (id self, SEL sel, ...); void xamarin_static_stret_trampoline (void *buffer, id self, SEL sel, ...); void xamarin_static_x86_double_abi_stret_trampoline (); -unsigned long long xamarin_longret_trampoline (id self, SEL sel, ...); -unsigned long long xamarin_static_longret_trampoline (id self, SEL sel, ...); +long long xamarin_longret_trampoline (id self, SEL sel, ...); +long long xamarin_static_longret_trampoline (id self, SEL sel, ...); id xamarin_copyWithZone_trampoline1 (id self, SEL sel, NSZone *zone); id xamarin_copyWithZone_trampoline2 (id self, SEL sel, NSZone *zone); int xamarin_get_gchandle_trampoline (id self, SEL sel); From d50364aa6acafcb573a471c734799039527542ef Mon Sep 17 00:00:00 2001 From: Manuel de la Pena Date: Thu, 14 Nov 2019 10:43:32 -0500 Subject: [PATCH 3/4] [Runtime] Enable the -Wsign-conversion on trampilines-varargs files. Enable the flag that was disabled via pragmas. Continuation of PR: https://github.com/xamarin/xamarin-macios/pull/7405 --- runtime/trampolines-varargs.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/trampolines-varargs.m b/runtime/trampolines-varargs.m index f2d6e110179a..72c4fc894cd5 100644 --- a/runtime/trampolines-varargs.m +++ b/runtime/trampolines-varargs.m @@ -132,7 +132,7 @@ case _C_ULNG: case _C_LNG_LNG: case _C_ULNG_LNG: - state->longlong_ret = *(uint64_t *) mono_object_unbox (value); + state->longlong_ret = *(int64_t *) mono_object_unbox (value); break; // For pointer types we get the value itself. From d8d88103e7de5d4d595853f8419bd820a0427d79 Mon Sep 17 00:00:00 2001 From: Manuel de la Pena Date: Thu, 14 Nov 2019 10:50:53 -0500 Subject: [PATCH 4/4] Remove pragma. --- runtime/trampolines-varargs.m | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/runtime/trampolines-varargs.m b/runtime/trampolines-varargs.m index 72c4fc894cd5..a71ce6a55182 100644 --- a/runtime/trampolines-varargs.m +++ b/runtime/trampolines-varargs.m @@ -1,7 +1,3 @@ -// TODO: temp ignore to minimize diff -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wsign-conversion" - #if !defined (__i386__) && !defined (__x86_64__) && !(defined (__arm64__) && !defined(__ILP32__)) #define __VARARGS_TRAMPOLINES__ 1 #endif @@ -323,6 +319,4 @@ va_end (state.ap); } -#endif /* __VARARGS_TRAMPOLINES__ */ - -#pragma clang diagnostic pop +#endif /* __VARARGS_TRAMPOLINES__ */ \ No newline at end of file