Skip to content

Commit b14c436

Browse files
authored
Revert "[tsan] Don't use enum __tsan_memory_order in tsan interface" (#115032)
Reverts #114724 Breaks OSX builds
1 parent 380fd09 commit b14c436

File tree

4 files changed

+336
-336
lines changed

4 files changed

+336
-336
lines changed

compiler-rt/include/sanitizer/tsan_interface_atomic.h

Lines changed: 87 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -43,178 +43,183 @@ typedef enum {
4343
} __tsan_memory_order;
4444

4545
__tsan_atomic8 SANITIZER_CDECL
46-
__tsan_atomic8_load(const volatile __tsan_atomic8 *a, int mo);
46+
__tsan_atomic8_load(const volatile __tsan_atomic8 *a, __tsan_memory_order mo);
4747
__tsan_atomic16 SANITIZER_CDECL
48-
__tsan_atomic16_load(const volatile __tsan_atomic16 *a, int mo);
48+
__tsan_atomic16_load(const volatile __tsan_atomic16 *a, __tsan_memory_order mo);
4949
__tsan_atomic32 SANITIZER_CDECL
50-
__tsan_atomic32_load(const volatile __tsan_atomic32 *a, int mo);
50+
__tsan_atomic32_load(const volatile __tsan_atomic32 *a, __tsan_memory_order mo);
5151
__tsan_atomic64 SANITIZER_CDECL
52-
__tsan_atomic64_load(const volatile __tsan_atomic64 *a, int mo);
52+
__tsan_atomic64_load(const volatile __tsan_atomic64 *a, __tsan_memory_order mo);
5353
#if __TSAN_HAS_INT128
54-
__tsan_atomic128 SANITIZER_CDECL
55-
__tsan_atomic128_load(const volatile __tsan_atomic128 *a, int mo);
54+
__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_load(
55+
const volatile __tsan_atomic128 *a, __tsan_memory_order mo);
5656
#endif
5757

5858
void SANITIZER_CDECL __tsan_atomic8_store(volatile __tsan_atomic8 *a,
59-
__tsan_atomic8 v, int mo);
59+
__tsan_atomic8 v,
60+
__tsan_memory_order mo);
6061
void SANITIZER_CDECL __tsan_atomic16_store(volatile __tsan_atomic16 *a,
61-
__tsan_atomic16 v, int mo);
62+
__tsan_atomic16 v,
63+
__tsan_memory_order mo);
6264
void SANITIZER_CDECL __tsan_atomic32_store(volatile __tsan_atomic32 *a,
63-
__tsan_atomic32 v, int mo);
65+
__tsan_atomic32 v,
66+
__tsan_memory_order mo);
6467
void SANITIZER_CDECL __tsan_atomic64_store(volatile __tsan_atomic64 *a,
65-
__tsan_atomic64 v, int mo);
68+
__tsan_atomic64 v,
69+
__tsan_memory_order mo);
6670
#if __TSAN_HAS_INT128
6771
void SANITIZER_CDECL __tsan_atomic128_store(volatile __tsan_atomic128 *a,
68-
__tsan_atomic128 v, int mo);
72+
__tsan_atomic128 v,
73+
__tsan_memory_order mo);
6974
#endif
7075

71-
__tsan_atomic8 SANITIZER_CDECL
72-
__tsan_atomic8_exchange(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);
76+
__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_exchange(
77+
volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
7378
__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_exchange(
74-
volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);
79+
volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
7580
__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_exchange(
76-
volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);
81+
volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
7782
__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_exchange(
78-
volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);
83+
volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
7984
#if __TSAN_HAS_INT128
8085
__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_exchange(
81-
volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);
86+
volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
8287
#endif
8388

84-
__tsan_atomic8 SANITIZER_CDECL
85-
__tsan_atomic8_fetch_add(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);
89+
__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_add(
90+
volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
8691
__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_add(
87-
volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);
92+
volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
8893
__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_add(
89-
volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);
94+
volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
9095
__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_add(
91-
volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);
96+
volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
9297
#if __TSAN_HAS_INT128
9398
__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_add(
94-
volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);
99+
volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
95100
#endif
96101

97-
__tsan_atomic8 SANITIZER_CDECL
98-
__tsan_atomic8_fetch_sub(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);
102+
__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_sub(
103+
volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
99104
__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_sub(
100-
volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);
105+
volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
101106
__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_sub(
102-
volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);
107+
volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
103108
__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_sub(
104-
volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);
109+
volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
105110
#if __TSAN_HAS_INT128
106111
__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_sub(
107-
volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);
112+
volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
108113
#endif
109114

110-
__tsan_atomic8 SANITIZER_CDECL
111-
__tsan_atomic8_fetch_and(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);
115+
__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_and(
116+
volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
112117
__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_and(
113-
volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);
118+
volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
114119
__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_and(
115-
volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);
120+
volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
116121
__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_and(
117-
volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);
122+
volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
118123
#if __TSAN_HAS_INT128
119124
__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_and(
120-
volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);
125+
volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
121126
#endif
122127

123-
__tsan_atomic8 SANITIZER_CDECL
124-
__tsan_atomic8_fetch_or(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);
128+
__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_or(
129+
volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
125130
__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_or(
126-
volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);
131+
volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
127132
__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_or(
128-
volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);
133+
volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
129134
__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_or(
130-
volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);
135+
volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
131136
#if __TSAN_HAS_INT128
132137
__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_or(
133-
volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);
138+
volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
134139
#endif
135140

136-
__tsan_atomic8 SANITIZER_CDECL
137-
__tsan_atomic8_fetch_xor(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);
141+
__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_xor(
142+
volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
138143
__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_xor(
139-
volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);
144+
volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
140145
__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_xor(
141-
volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);
146+
volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
142147
__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_xor(
143-
volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);
148+
volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
144149
#if __TSAN_HAS_INT128
145150
__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_xor(
146-
volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);
151+
volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
147152
#endif
148153

149-
__tsan_atomic8 SANITIZER_CDECL
150-
__tsan_atomic8_fetch_nand(volatile __tsan_atomic8 *a, __tsan_atomic8 v, int mo);
154+
__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_fetch_nand(
155+
volatile __tsan_atomic8 *a, __tsan_atomic8 v, __tsan_memory_order mo);
151156
__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_fetch_nand(
152-
volatile __tsan_atomic16 *a, __tsan_atomic16 v, int mo);
157+
volatile __tsan_atomic16 *a, __tsan_atomic16 v, __tsan_memory_order mo);
153158
__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_fetch_nand(
154-
volatile __tsan_atomic32 *a, __tsan_atomic32 v, int mo);
159+
volatile __tsan_atomic32 *a, __tsan_atomic32 v, __tsan_memory_order mo);
155160
__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_fetch_nand(
156-
volatile __tsan_atomic64 *a, __tsan_atomic64 v, int mo);
161+
volatile __tsan_atomic64 *a, __tsan_atomic64 v, __tsan_memory_order mo);
157162
#if __TSAN_HAS_INT128
158163
__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_fetch_nand(
159-
volatile __tsan_atomic128 *a, __tsan_atomic128 v, int mo);
164+
volatile __tsan_atomic128 *a, __tsan_atomic128 v, __tsan_memory_order mo);
160165
#endif
161166

162167
int SANITIZER_CDECL __tsan_atomic8_compare_exchange_weak(
163-
volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v, int mo,
164-
int fail_mo);
168+
volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v,
169+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
165170
int SANITIZER_CDECL __tsan_atomic16_compare_exchange_weak(
166-
volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v, int mo,
167-
int fail_mo);
171+
volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v,
172+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
168173
int SANITIZER_CDECL __tsan_atomic32_compare_exchange_weak(
169-
volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v, int mo,
170-
int fail_mo);
174+
volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v,
175+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
171176
int SANITIZER_CDECL __tsan_atomic64_compare_exchange_weak(
172-
volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v, int mo,
173-
int fail_mo);
177+
volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v,
178+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
174179
#if __TSAN_HAS_INT128
175180
int SANITIZER_CDECL __tsan_atomic128_compare_exchange_weak(
176181
volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v,
177-
int mo, int fail_mo);
182+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
178183
#endif
179184

180185
int SANITIZER_CDECL __tsan_atomic8_compare_exchange_strong(
181-
volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v, int mo,
182-
int fail_mo);
186+
volatile __tsan_atomic8 *a, __tsan_atomic8 *c, __tsan_atomic8 v,
187+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
183188
int SANITIZER_CDECL __tsan_atomic16_compare_exchange_strong(
184-
volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v, int mo,
185-
int fail_mo);
189+
volatile __tsan_atomic16 *a, __tsan_atomic16 *c, __tsan_atomic16 v,
190+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
186191
int SANITIZER_CDECL __tsan_atomic32_compare_exchange_strong(
187-
volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v, int mo,
188-
int fail_mo);
192+
volatile __tsan_atomic32 *a, __tsan_atomic32 *c, __tsan_atomic32 v,
193+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
189194
int SANITIZER_CDECL __tsan_atomic64_compare_exchange_strong(
190-
volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v, int mo,
191-
int fail_mo);
195+
volatile __tsan_atomic64 *a, __tsan_atomic64 *c, __tsan_atomic64 v,
196+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
192197
#if __TSAN_HAS_INT128
193198
int SANITIZER_CDECL __tsan_atomic128_compare_exchange_strong(
194199
volatile __tsan_atomic128 *a, __tsan_atomic128 *c, __tsan_atomic128 v,
195-
int mo, int fail_mo);
200+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
196201
#endif
197202

198203
__tsan_atomic8 SANITIZER_CDECL __tsan_atomic8_compare_exchange_val(
199-
volatile __tsan_atomic8 *a, __tsan_atomic8 c, __tsan_atomic8 v, int mo,
200-
int fail_mo);
204+
volatile __tsan_atomic8 *a, __tsan_atomic8 c, __tsan_atomic8 v,
205+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
201206
__tsan_atomic16 SANITIZER_CDECL __tsan_atomic16_compare_exchange_val(
202-
volatile __tsan_atomic16 *a, __tsan_atomic16 c, __tsan_atomic16 v, int mo,
203-
int fail_mo);
207+
volatile __tsan_atomic16 *a, __tsan_atomic16 c, __tsan_atomic16 v,
208+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
204209
__tsan_atomic32 SANITIZER_CDECL __tsan_atomic32_compare_exchange_val(
205-
volatile __tsan_atomic32 *a, __tsan_atomic32 c, __tsan_atomic32 v, int mo,
206-
int fail_mo);
210+
volatile __tsan_atomic32 *a, __tsan_atomic32 c, __tsan_atomic32 v,
211+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
207212
__tsan_atomic64 SANITIZER_CDECL __tsan_atomic64_compare_exchange_val(
208-
volatile __tsan_atomic64 *a, __tsan_atomic64 c, __tsan_atomic64 v, int mo,
209-
int fail_mo);
213+
volatile __tsan_atomic64 *a, __tsan_atomic64 c, __tsan_atomic64 v,
214+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
210215
#if __TSAN_HAS_INT128
211216
__tsan_atomic128 SANITIZER_CDECL __tsan_atomic128_compare_exchange_val(
212217
volatile __tsan_atomic128 *a, __tsan_atomic128 c, __tsan_atomic128 v,
213-
int mo, int fail_mo);
218+
__tsan_memory_order mo, __tsan_memory_order fail_mo);
214219
#endif
215220

216-
void SANITIZER_CDECL __tsan_atomic_thread_fence(int mo);
217-
void SANITIZER_CDECL __tsan_atomic_signal_fence(int mo);
221+
void SANITIZER_CDECL __tsan_atomic_thread_fence(__tsan_memory_order mo);
222+
void SANITIZER_CDECL __tsan_atomic_signal_fence(__tsan_memory_order mo);
218223

219224
#ifdef __cplusplus
220225
} // extern "C"

compiler-rt/lib/tsan/rtl/tsan_interceptors_mac.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,14 @@ int setcontext(const ucontext_t *ucp);
4040

4141
namespace __tsan {
4242

43-
// The non-barrier versions of OSAtomic* functions are semantically
44-
// morder::relaxed, but the two variants (e.g. OSAtomicAdd32 and
45-
// OSAtomicAdd32Barrier) are actually aliases of each other, and we cannot have
46-
// different interceptors for them, because they're actually the same function.
47-
// Thus, we have to stay conservative and treat the non-barrier versions as
48-
// morder::acq_rel.
49-
static constexpr morder kMacOrderBarrier = morder::acq_rel;
50-
static constexpr morder kMacOrderNonBarrier = morder::acq_rel;
51-
static constexpr morder kMacFailureOrder = morder::relaxed;
43+
// The non-barrier versions of OSAtomic* functions are semantically mo_relaxed,
44+
// but the two variants (e.g. OSAtomicAdd32 and OSAtomicAdd32Barrier) are
45+
// actually aliases of each other, and we cannot have different interceptors for
46+
// them, because they're actually the same function. Thus, we have to stay
47+
// conservative and treat the non-barrier versions as mo_acq_rel.
48+
static constexpr morder kMacOrderBarrier = mo_acq_rel;
49+
static constexpr morder kMacOrderNonBarrier = mo_acq_rel;
50+
static constexpr morder kMacFailureOrder = mo_relaxed;
5251

5352
# define OSATOMIC_INTERCEPTOR(return_t, t, tsan_t, f, tsan_atomic_f, mo) \
5453
TSAN_INTERCEPTOR(return_t, f, t x, volatile t *ptr) { \
@@ -465,7 +464,7 @@ struct fake_shared_weak_count {
465464
// Shared and weak pointers in C++ maintain reference counts via atomics in
466465
// libc++.dylib, which are TSan-invisible, and this leads to false positives in
467466
// destructor code. These interceptors re-implements the whole functions so that
468-
// the morder::acq_rel semantics of the atomic decrement are visible.
467+
// the mo_acq_rel semantics of the atomic decrement are visible.
469468
//
470469
// Unfortunately, the interceptors cannot simply Acquire/Release some sync
471470
// object and call the original function, because it would have a race between
@@ -480,11 +479,11 @@ STDCXX_INTERCEPTOR(void, _ZNSt3__119__shared_weak_count16__release_sharedEv,
480479

481480
SCOPED_TSAN_INTERCEPTOR(_ZNSt3__119__shared_weak_count16__release_sharedEv,
482481
o);
483-
if (__tsan_atomic64_fetch_add(&o->shared_owners, -1, morder::release) == 0) {
482+
if (__tsan_atomic64_fetch_add(&o->shared_owners, -1, mo_release) == 0) {
484483
Acquire(thr, pc, (uptr)&o->shared_owners);
485484
o->on_zero_shared();
486-
if (__tsan_atomic64_fetch_add(&o->shared_weak_owners, -1,
487-
morder::release) == 0) {
485+
if (__tsan_atomic64_fetch_add(&o->shared_weak_owners, -1, mo_release) ==
486+
0) {
488487
Acquire(thr, pc, (uptr)&o->shared_weak_owners);
489488
o->on_zero_shared_weak();
490489
}
@@ -497,7 +496,7 @@ STDCXX_INTERCEPTOR(bool, _ZNSt3__114__shared_count16__release_sharedEv,
497496
return REAL(_ZNSt3__114__shared_count16__release_sharedEv)(o);
498497

499498
SCOPED_TSAN_INTERCEPTOR(_ZNSt3__114__shared_count16__release_sharedEv, o);
500-
if (__tsan_atomic64_fetch_add(&o->shared_owners, -1, morder::release) == 0) {
499+
if (__tsan_atomic64_fetch_add(&o->shared_owners, -1, mo_release) == 0) {
501500
Acquire(thr, pc, (uptr)&o->shared_owners);
502501
o->on_zero_shared();
503502
return true;

0 commit comments

Comments
 (0)