From dd20323f51b676bd0f13c82dc1587e8afcdd527a Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Mon, 16 May 2022 14:40:57 -0700 Subject: [PATCH] [compiler-rt builtins] Assert that atomic.c can be compiled correctly. 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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compiler-rt/lib/builtins/atomic.c b/compiler-rt/lib/builtins/atomic.c index 4c3ebb99a513..6d54b61f6410 100644 --- a/compiler-rt/lib/builtins/atomic.c +++ b/compiler-rt/lib/builtins/atomic.c @@ -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) {