From d95885d91ead6569056fae08589606dff683d4bd Mon Sep 17 00:00:00 2001 From: Xavier Claessens Date: Fri, 16 Oct 2020 08:24:16 -0400 Subject: [PATCH] atomic: Fix type error with clang++ clang++ checks the 2nd args of __atomic_compare_exchange_n() has the same type as the first, which fails when 2nd arg is nullptr which is of type nullptr_t. Ideally it should do `glib_typeof (*(atomic)) gapcae_oldval = (oldval);` to ensure oldval and atomic have compatible types but unfortunately that does not work neither. Since that function never has been typesafe, and it is not even attempting to use glib_typeof in case __ATOMIC_SEQ_CST is not defined, drop it in __atomic_ case too. Fixes issue #2226. --- glib/gatomic.h | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/glib/gatomic.h b/glib/gatomic.h index e6eccfada..12387df26 100644 --- a/glib/gatomic.h +++ b/glib/gatomic.h @@ -182,17 +182,6 @@ G_END_DECLS (void) (0 ? *(atomic) ^ (val) : 1); \ (guint) __atomic_fetch_xor ((atomic), (val), __ATOMIC_SEQ_CST); \ })) - -#if defined(glib_typeof) -#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \ - (G_GNUC_EXTENSION ({ \ - G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer)); \ - glib_typeof ((oldval)) gapcae_oldval = (oldval); \ - G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ - (void) (0 ? (gpointer) *(atomic) : NULL); \ - __atomic_compare_exchange_n ((atomic), &gapcae_oldval, (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \ - })) -#else /* if !defined(glib_typeof) */ #define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \ (G_GNUC_EXTENSION ({ \ G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer)); \ @@ -201,7 +190,6 @@ G_END_DECLS (void) (0 ? (gpointer) *(atomic) : NULL); \ __atomic_compare_exchange_n ((atomic), &gapcae_oldval, (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \ })) -#endif /* defined(glib_typeof) */ #define g_atomic_pointer_add(atomic, val) \ (G_GNUC_EXTENSION ({ \ G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \