mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-05 02:36:19 +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); \
|
(void) (0 ? *(atomic) ^ (val) : 1); \
|
||||||
(guint) __atomic_fetch_xor ((atomic), (val), __ATOMIC_SEQ_CST); \
|
(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) \
|
#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \
|
||||||
(G_GNUC_EXTENSION ({ \
|
(G_GNUC_EXTENSION ({ \
|
||||||
G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer)); \
|
G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer)); \
|
||||||
@ -201,7 +190,6 @@ G_END_DECLS
|
|||||||
(void) (0 ? (gpointer) *(atomic) : NULL); \
|
(void) (0 ? (gpointer) *(atomic) : NULL); \
|
||||||
__atomic_compare_exchange_n ((atomic), &gapcae_oldval, (newval), FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST) ? TRUE : FALSE; \
|
__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) \
|
#define g_atomic_pointer_add(atomic, val) \
|
||||||
(G_GNUC_EXTENSION ({ \
|
(G_GNUC_EXTENSION ({ \
|
||||||
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
|
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
|
||||||
|
Loading…
Reference in New Issue
Block a user