mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-26 22:16:16 +01:00
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.
This commit is contained in:
parent
51003d409b
commit
d95885d91e
@ -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)); \
|
||||
|
Loading…
Reference in New Issue
Block a user