Fix c.inc _Atomic define for C++ (#1231)

c.inc (AFAICT erroneously) defined _Atomic(t) as `volatile t *`, when it
should have just said `volatile t`, when __STDC_VERSION__ was too small.
This happens when we’re compiling C++, but in C++11, _Atomic is a define
supplied by the STL rather than a keyword supplied by the compiler. Wait
though, it gets better: in C++11, _Atomic hooks you into the morass that
is stdatomic.h, and ultimately refers everything back to std::atomic<T>.

The gory, horrifying details are in libcxx's __atomic/cxx_atomic_impl.h.
The tldr is that for our purposes it’s fine to just say volatile and use
the normal libc/intrin/atomic.h functions.
This commit is contained in:
Steven Dee (Jōshin) 2024-06-17 21:09:31 -07:00
parent 8e3b361aeb
commit a795017416
No known key found for this signature in database

View file

@ -74,7 +74,7 @@
#endif
#if __STDC_VERSION__ + 0 < 201112
#define _Atomic(t) volatile t *
#define _Atomic(t) volatile t
#endif
#ifdef __llvm__