[PATCH] D45470: Emit an error when mixing <stdatomic.h> and <atomic>

Volodymyr Sapsai via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu May 3 15:00:10 PDT 2018


vsapsai added a comment.

In https://reviews.llvm.org/D45470#1087026, @jfb wrote:

> This isn't bad, so I'd go with it, but separately I imagine that we could implement the suggestion in http://wg21.link/p0943 and expose it even before C++20? Not sure we do this much, but I'd argue that before that fix stdatomic.h is just useless anyways, so it's a fine breakage. I imagine that the stdatomic.h where it's implemented would be the one injected by clang, not the libc++ one?


Change visible here is for the header injected by clang. libc++ change is r331379 <https://reviews.llvm.org/rCXX331379> but that error triggers only when you consciously decided to opt in C atomics but included C++ `<atomic>`.

I am concerned that the change adds the error to the valid code that uses C atomics from C++ and doesn't mix them with C++ atomics. It is unfortunate but I think it is a right trade-off. Adding `__ALLOW_STDC_ATOMICS_IN_CXX__` to fix such code shouldn't take much time. While having an explicit error can save a lot of time trying to figure out a broken build. Also I expect that with time libc++ will use `<atomic>` more and mixing currently safe parts of libc++ with `<stdatomic.h>` is likely to cause problems at some point. So it is better to be prepared and have an explicit error for this case.


Repository:
  rC Clang

https://reviews.llvm.org/D45470





More information about the cfe-commits mailing list