[compiler-rt builtins] Assert that atomic.c can be compiled correctly.
authorEli Friedman <efriedma@quicinc.com>
Mon, 16 May 2022 21:40:57 +0000 (14:40 -0700)
committerEli Friedman <efriedma@quicinc.com>
Mon, 16 May 2022 21:40:57 +0000 (14:40 -0700)
The spinlock requires that lock-free operations are available;
otherwise, the implementation just calls itself. As discussed in
D120026.

Differential Revision: https://reviews.llvm.org/D123080

compiler-rt/lib/builtins/atomic.c

index 4c3ebb9..6d54b61 100644 (file)
@@ -92,6 +92,8 @@ __inline static void lock(Lock *l) { OSSpinLockLock(l); }
 static Lock locks[SPINLOCK_COUNT]; // initialized to OS_SPINLOCK_INIT which is 0
 
 #else
+_Static_assert(__atomic_always_lock_free(sizeof(uintptr_t), 0),
+               "Implementation assumes lock-free pointer-size cmpxchg");
 typedef _Atomic(uintptr_t) Lock;
 /// Unlock a lock.  This is a release operation.
 __inline static void unlock(Lock *l) {