summaryrefslogtreecommitdiff
path: root/src/cairo-atomic.c
diff options
context:
space:
mode:
authorM Joonas Pihlaja <jpihlaja@cc.helsinki.fi>2009-06-21 14:02:46 +0100
committerM Joonas Pihlaja <jpihlaja@cc.helsinki.fi>2009-06-21 17:34:12 +0300
commit80990c7f729a666fc646182a36ffd311d7396a1a (patch)
treece67c289795d9459a67a6effe3b3dae8bba1d961 /src/cairo-atomic.c
parentd0c1c9282164bffb76f7419873e93608dc6d9876 (diff)
downloadcairo-80990c7f729a666fc646182a36ffd311d7396a1a.tar.gz
[atomic] Use an integer __sync_val_compare_and_swap() for pointer CAS.
Fix an implicit pointer/integer cast in _cairo_atomic_ptr_cmpxchg() when building with LLVM/clang. The Intel synchronization primitives __sync_val_compare_and_swap() are only defined by Intel for types int, long, long long and their unsigned variants. This patch uses one of those for _cairo_atomic_ptr_cmpxchg() instead of relying on a gcc extension of __sync_val_compare_and_swap() to pointer types.
Diffstat (limited to 'src/cairo-atomic.c')
-rw-r--r--src/cairo-atomic.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cairo-atomic.c b/src/cairo-atomic.c
index 777ba5cdf..146ad857d 100644
--- a/src/cairo-atomic.c
+++ b/src/cairo-atomic.c
@@ -36,7 +36,11 @@
#include "cairo-atomic-private.h"
#include "cairo-mutex-private.h"
-#ifndef HAS_ATOMIC_OPS
+#ifdef HAS_ATOMIC_OPS
+COMPILE_TIME_ASSERT(sizeof(void*) == sizeof(int) ||
+ sizeof(void*) == sizeof(long) ||
+ sizeof(void*) == sizeof(long long));
+#else
void
_cairo_atomic_int_inc (int *x)
{