aboutsummaryrefslogtreecommitdiff
path: root/libcxx
diff options
context:
space:
mode:
authorLouis Dionne <ldionne.2@gmail.com>2024-03-04 18:24:51 -0500
committerGitHub <noreply@github.com>2024-03-04 18:24:51 -0500
commit40081a45a14f7aa6249fa034d961549c0b1762a0 (patch)
treef0e86827bb7ed8047e2fb8dd7caa13446c07017c /libcxx
parent5174b3802575425dcbc58680ccce10961fdb8b67 (diff)
downloadllvm-40081a45a14f7aa6249fa034d961549c0b1762a0.zip
llvm-40081a45a14f7aa6249fa034d961549c0b1762a0.tar.gz
llvm-40081a45a14f7aa6249fa034d961549c0b1762a0.tar.bz2
[libc++] Fix diagnostic for <stdatomic.h> before C++23 (#83351)
We normally try to issue a reasonable diagnostic when mixing <stdatomic.h> and <atomic> before C++23. However, after granularizing the <atomic> header, the check and the #error message was moved to *after* the point where mixing both causes problems. When mixing both headers, we would hence get the diagnostic burried under a pile of previous diagnostics in e.g. __atomic/kill_dependency.h. This patch moves the check earlier to restore the intended behavior. It also switches from `#ifdef kill_dependency` to an explicit check of the inclusion of the header and the Standard version, which seems to be more reliable than checking whether a macro is defined.
Diffstat (limited to 'libcxx')
-rw-r--r--libcxx/include/atomic11
1 files changed, 6 insertions, 5 deletions
diff --git a/libcxx/include/atomic b/libcxx/include/atomic
index 61ff61d..cb142b0 100644
--- a/libcxx/include/atomic
+++ b/libcxx/include/atomic
@@ -587,6 +587,12 @@ template <class T>
*/
+#include <__config>
+
+#if _LIBCPP_STD_VER < 23 && defined(_LIBCPP_STDATOMIC_H)
+# error <atomic> is incompatible with <stdatomic.h> before C++23. Please compile with -std=c++23.
+#endif
+
#include <__atomic/aliases.h>
#include <__atomic/atomic.h>
#include <__atomic/atomic_base.h>
@@ -601,7 +607,6 @@ template <class T>
#include <__atomic/is_always_lock_free.h>
#include <__atomic/kill_dependency.h>
#include <__atomic/memory_order.h>
-#include <__config>
#include <version>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -612,10 +617,6 @@ template <class T>
# error <atomic> is not implemented
#endif
-#ifdef kill_dependency
-# error <atomic> is incompatible with <stdatomic.h> before C++23. Please compile with -std=c++23.
-#endif
-
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <cmath>
# include <compare>