From 69077272cfdca95fe59d262a0994422f093bf207 Mon Sep 17 00:00:00 2001 From: Ryan Macnak Date: Wed, 13 Nov 2024 20:20:19 +0000 Subject: [PATCH] [vm] Fix AtomicBitFieldContainer::TryClearIgnoreRace actually ignore on Clang. TEST=tsan Bug: https://github.com/dart-lang/sdk/issues/57083 Change-Id: I0233a82f176aa357c0ae3a1bfb63358471f3b4e4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/394663 Commit-Queue: Ryan Macnak Reviewed-by: Alexander Aprelev --- runtime/vm/bitfield.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/runtime/vm/bitfield.h b/runtime/vm/bitfield.h index 910f17866ad..98cb25fcce7 100644 --- a/runtime/vm/bitfield.h +++ b/runtime/vm/bitfield.h @@ -10,6 +10,7 @@ #include "platform/assert.h" #include "platform/atomic.h" #include "platform/globals.h" +#include "platform/no_tsan.h" #include "platform/thread_sanitizer.h" #include "platform/utils.h" @@ -114,9 +115,9 @@ class AtomicBitFieldContainer { } template - NO_SANITIZE_THREAD bool TryClearIgnoreRace() { + bool TryClearIgnoreRace() { T mask = ~TargetBitField::encode(true); - T old_field = field_.fetch_and(mask, std::memory_order_relaxed); + T old_field = FetchAndRelaxedIgnoreRace(&field_, mask); return TargetBitField::decode(old_field); }