http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59215

--- Comment #15 from Kostya Serebryany <kcc at gcc dot gnu.org> ---
(In reply to Joost VandeVondele from comment #14)
> (In reply to Jonathan Wakely from comment #10)
> > No, you're right, that's a different issue.  I think we've just been relying
> > on loads of (correctly-aligned) _Atomic_word being atomic, although that's
> > not going to keep tsan happy!  There's no barrier on the read, but I think
> > the worst that will happen is we won't see the correct value and the CAS
> > loop will go round again. We won't see __count==0 spuriously, because once
> > that count reaches zero it never gets incremented again.
> 
> Interestingly, a very similar comment was made yesterday in the context of
> libgomp: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59194#c4
> 
> If for performance reasons a plain load would nevertheless be preferred over
> an atomic one, 

Why would that be? relaxed atomic loads end up generating the same instructions 
as plain loads. 

> I wonder if these threading libraries could e.g. use
> conditional compilation such that, when compiled with -fsanitize=thread, an
> atomic load is used nevertheless. Does -fsanitize=thread define a
> __SANITIZE_THREAD_IN_USE or similar ?

In clang, tsan uses __has_feature(thread_sanitizer).

In gcc asan defines __SANITIZE_ADDRESS__, but I don't think we have 
__SANITIZE_THREAD__ and it would be very pity if we have to use it in libstdc++

Reply via email to