https://gcc.gnu.org/g:987e70f4290451abd98eda8b82e97b4ad25ee3c2
commit r12-10608-g987e70f4290451abd98eda8b82e97b4ad25ee3c2 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 b565a1c1ab18..2bb23decf8d1 100644 --- a/libstdc++-v3/include/c_compatibility/stdatomic.h +++ b/libstdc++-v3/include/c_compatibility/stdatomic.h @@ -34,7 +34,7 @@ #define __cpp_lib_stdatomic_h 202011L -#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>> ); +}