Avoid triggering assert when program calls OSAtomicCompareAndSwapLong
A previous change brought the new, relaxed implementation of "on failure memory ordering" for synchronization primitives in LLVM over to TSan land [1]. It included the following assert: ``` // 31.7.2.18: "The failure argument shall not be memory_order_release // nor memory_order_acq_rel". LLVM (2021-05) fallbacks to Monotonic // (mo_relaxed) when those are used. CHECK(IsLoadOrder(fmo)); static bool IsLoadOrder(morder mo) { return mo == mo_relaxed || mo == mo_consume || mo == mo_acquire || mo == mo_seq_cst; } ``` A previous workaround for a false positive when using an old Darwin synchronization API assumed this failure mode to be unused and passed a dummy value [2]. We update this value to `mo_relaxed` which is also the value used by the actual implementation to avoid triggering the assert. [1] https://reviews.llvm.org/D99434 [2] https://reviews.llvm.org/D21733 rdar://78122243 Differential Revision: https://reviews.llvm.org/D105844
Loading
Please sign in to comment