Note: we trust any other compiler that fully implements GNU extension
to define __GNUC__
RT#4642
Reviewed-by: Andy Polyakov <appro@openssl.org>
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;
if (!CRYPTO_THREAD_unlock(lock))
return 0;
-#endif
+# endif
return 1;
}