diff options
-rw-r--r-- | compiler-rt/lib/ubsan/ubsan_value.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/compiler-rt/lib/ubsan/ubsan_value.h b/compiler-rt/lib/ubsan/ubsan_value.h index 267388b4577..e673f7af1d8 100644 --- a/compiler-rt/lib/ubsan/ubsan_value.h +++ b/compiler-rt/lib/ubsan/ubsan_value.h @@ -20,6 +20,7 @@ #error "UBSan not supported for this platform!" #endif +#include "sanitizer_common/sanitizer_atomic.h" #include "sanitizer_common/sanitizer_common.h" // FIXME: Move this out to a config header. @@ -64,7 +65,9 @@ public: /// \brief Atomically acquire a copy, disabling original in-place. /// Exactly one call to acquire() returns a copy that isn't disabled. SourceLocation acquire() { - u32 OldColumn = __sync_lock_test_and_set(&Column, ~u32(0)); + u32 OldColumn = __sanitizer::atomic_exchange( + (__sanitizer::atomic_uint32_t *)&Column, ~u32(0), + __sanitizer::memory_order_relaxed); return SourceLocation(Filename, Line, OldColumn); } |