https://gcc.gnu.org/g:c94c8ff5f5769ab59cbdd46c8669aa7e3ac83a44

commit r14-10401-gc94c8ff5f5769ab59cbdd46c8669aa7e3ac83a44
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Sun Jul 7 12:22:42 2024 +0100

    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.
    
    (cherry picked from commit 40d234dd6439e8c8cfbf3f375a61906aed35c80d)

Diff:
---
 libstdc++-v3/include/c_compatibility/stdatomic.h           |  2 +-
 .../testsuite/29_atomics/headers/stdatomic.h/115807.cc     | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/libstdc++-v3/include/c_compatibility/stdatomic.h 
b/libstdc++-v3/include/c_compatibility/stdatomic.h
index 52daa16c9b1e..7236260795e4 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 000000000000..14f320fe8357
--- /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>> );
+}

Reply via email to