Check for __GNUC__ to use GNU C atomic buildins
authorRichard Levitte <levitte@openssl.org>
Wed, 24 Aug 2016 11:03:20 +0000 (13:03 +0200)
committerMatt Caswell <matt@openssl.org>
Wed, 24 Aug 2016 13:37:30 +0000 (14:37 +0100)
Note: we trust any other compiler that fully implements GNU extension
to define __GNUC__

RT#4642

Reviewed-by: Andy Polyakov <appro@openssl.org>
crypto/threads_pthread.c

index 6f5e812..72ea838 100644 (file)
@@ -109,9 +109,9 @@ int CRYPTO_THREAD_compare_id(CRYPTO_THREAD_ID a, CRYPTO_THREAD_ID b)
 
 int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
 {
-#ifdef __ATOMIC_RELAXED
+# if defined(__GNUC__) && defined(__ATOMIC_RELAXED)
     *ret = __atomic_add_fetch(val, amount, __ATOMIC_RELAXED);
-#else
+# else
     if (!CRYPTO_THREAD_write_lock(lock))
         return 0;
 
@@ -120,7 +120,7 @@ int CRYPTO_atomic_add(int *val, int amount, int *ret, CRYPTO_RWLOCK *lock)
 
     if (!CRYPTO_THREAD_unlock(lock))
         return 0;
-#endif
+# endif
 
     return 1;
 }