aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2024-07-07 12:22:42 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2024-07-08 20:40:35 +0100
commit40d234dd6439e8c8cfbf3f375a61906aed35c80d (patch)
tree73bea4bd3a8a9bb5afc5f5ba71fbdf35ab6453ff
parenta0e64a043ec498f959a214b5b02d6c7177984a0f (diff)
downloadgcc-40d234dd6439e8c8cfbf3f375a61906aed35c80d.zip
gcc-40d234dd6439e8c8cfbf3f375a61906aed35c80d.tar.gz
gcc-40d234dd6439e8c8cfbf3f375a61906aed35c80d.tar.bz2
libstdc++: Fix _Atomic(T) macro in <stdatomic.h> [PR115807]
The definition of the _Atomic(T) macro needs to refer to ::std::atomic, not some other std::atomic relative to the current namespace. libstdc++-v3/ChangeLog: PR libstdc++/115807 * include/c_compatibility/stdatomic.h (_Atomic): Ensure it refers to std::atomic in the global namespace. * testsuite/29_atomics/headers/stdatomic.h/115807.cc: New test.
-rw-r--r--libstdc++-v3/include/c_compatibility/stdatomic.h2
-rw-r--r--libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc14
2 files changed, 15 insertions, 1 deletions
diff --git a/libstdc++-v3/include/c_compatibility/stdatomic.h b/libstdc++-v3/include/c_compatibility/stdatomic.h
index 5403b52..72b9446 100644
--- a/libstdc++-v3/include/c_compatibility/stdatomic.h
+++ b/libstdc++-v3/include/c_compatibility/stdatomic.h
@@ -35,7 +35,7 @@
#ifdef __cpp_lib_stdatomic_h // C++ >= 23
#include <atomic>
-#define _Atomic(_Tp) std::atomic<_Tp>
+#define _Atomic(_Tp) ::std::atomic<_Tp>
using std::memory_order;
using std::memory_order_relaxed;
diff --git a/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc
new file mode 100644
index 0000000..14f320f
--- /dev/null
+++ b/libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc
@@ -0,0 +1,14 @@
+// { dg-do compile { target c++23 } }
+#include <stdatomic.h>
+namespace other {
+ namespace std {
+ int atomic = 0;
+ }
+ _Atomic(long) a{};
+}
+
+#include <type_traits>
+
+namespace non::std {
+ static_assert( ::std::is_same_v<_Atomic(int), ::std::atomic<int>> );
+}