Commit 1dc9ae5c1e058a7e6b1711ba031bc2ceb95cf6aa

James Legg 2017-03-29T15:48:22

Use GCC's atomic loads in SDL_AtomicGet and SDL_AtomicGetPtr This fixes errors reported by address sanitizer, and generates simpler code on x86 architectures.

diff --git a/src/atomic/SDL_atomic.c b/src/atomic/SDL_atomic.c
index 828efee..7b4865c 100644
--- a/src/atomic/SDL_atomic.c
+++ b/src/atomic/SDL_atomic.c
@@ -211,21 +211,29 @@ SDL_AtomicAdd(SDL_atomic_t *a, int v)
 int
 SDL_AtomicGet(SDL_atomic_t *a)
 {
+#ifdef HAVE_GCC_ATOMICS
+    return __atomic_load_n(&a->value, __ATOMIC_SEQ_CST);
+#else
     int value;
     do {
         value = a->value;
     } while (!SDL_AtomicCAS(a, value, value));
     return value;
+#endif
 }
 
 void *
 SDL_AtomicGetPtr(void **a)
 {
+#ifdef HAVE_GCC_ATOMICS
+    return __atomic_load_n(a, __ATOMIC_SEQ_CST);
+#else
     void *value;
     do {
         value = *a;
     } while (!SDL_AtomicCASPtr(a, value, value));
     return value;
+#endif
 }
 
 void