Merge branch '1940-atomic-types' into 'master'

tests: Use pointers in calls to g_atomic_pointer_compare_and_exchange()

Closes #1940

See merge request GNOME/glib!1234
This commit is contained in:
Philip Withnall 2019-11-21 10:57:27 +00:00
commit 9dc006cfc8
2 changed files with 8 additions and 9 deletions

View File

@ -85,9 +85,7 @@ G_END_DECLS
#if defined(G_ATOMIC_LOCK_FREE) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
/* We prefer the new C11-style atomic extension of GCC if available */
/* FIXME: Temporarily disabled on FreeBSD due to CI failures:
* https://gitlab.gnome.org/GNOME/glib/issues/1940 */
#if defined(__ATOMIC_SEQ_CST) && !defined(__FreeBSD__)
#if defined(__ATOMIC_SEQ_CST)
#define g_atomic_int_get(atomic) \
(G_GNUC_EXTENSION ({ \
@ -187,6 +185,7 @@ G_END_DECLS
#define g_atomic_pointer_compare_and_exchange(atomic, oldval, newval) \
(G_GNUC_EXTENSION ({ \
G_STATIC_ASSERT (sizeof (oldval) == sizeof (gpointer)); \
__typeof__ ((oldval)) gapcae_oldval = (oldval); \
G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \
(void) (0 ? (gpointer) *(atomic) : NULL); \

View File

@ -83,14 +83,14 @@ test_types (void)
res = g_atomic_pointer_compare_and_exchange (&vp, &s, &s);
g_assert_false (res);
g_assert_true (vp == 0);
res = g_atomic_pointer_compare_and_exchange (&vp, 0, 0);
res = g_atomic_pointer_compare_and_exchange (&vp, NULL, NULL);
g_assert_true (res);
g_assert_true (vp == 0);
g_atomic_pointer_set (&ip, 0);
ip2 = g_atomic_pointer_get (&ip);
g_assert_true (ip2 == 0);
res = g_atomic_pointer_compare_and_exchange (&ip, 0, 0);
res = g_atomic_pointer_compare_and_exchange (&ip, NULL, NULL);
g_assert_true (res);
g_assert_true (ip == 0);
@ -98,7 +98,7 @@ test_types (void)
vp2 = (gpointer) g_atomic_pointer_get (&gs);
gs2 = (gsize) vp2;
g_assert_cmpuint (gs2, ==, 0);
res = g_atomic_pointer_compare_and_exchange (&gs, 0, 0);
res = g_atomic_pointer_compare_and_exchange (&gs, NULL, NULL);
g_assert_true (res);
g_assert_cmpuint (gs, ==, 0);
gs2 = (gsize) g_atomic_pointer_add (&gs, 5);
@ -191,14 +191,14 @@ G_GNUC_END_IGNORE_DEPRECATIONS
res = g_atomic_pointer_compare_and_exchange (&vp, &s, &s);
g_assert_false (res);
g_assert_true (vp == 0);
res = g_atomic_pointer_compare_and_exchange (&vp, 0, 0);
res = g_atomic_pointer_compare_and_exchange (&vp, NULL, NULL);
g_assert_true (res);
g_assert_true (vp == 0);
g_atomic_pointer_set (&ip, 0);
ip2 = g_atomic_pointer_get (&ip);
g_assert_true (ip2 == 0);
res = g_atomic_pointer_compare_and_exchange (&ip, 0, 0);
res = g_atomic_pointer_compare_and_exchange (&ip, NULL, NULL);
g_assert_true (res);
g_assert_true (ip == 0);
@ -206,7 +206,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
vp = g_atomic_pointer_get (&gs);
gs2 = (gsize) vp;
g_assert_cmpuint (gs2, ==, 0);
res = g_atomic_pointer_compare_and_exchange (&gs, 0, 0);
res = g_atomic_pointer_compare_and_exchange (&gs, NULL, NULL);
g_assert_true (res);
g_assert_cmpuint (gs, ==, 0);
gs2 = (gsize) g_atomic_pointer_add (&gs, 5);