diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2024-07-07 12:22:42 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2024-07-08 20:40:35 +0100 |
commit | 40d234dd6439e8c8cfbf3f375a61906aed35c80d (patch) | |
tree | 73bea4bd3a8a9bb5afc5f5ba71fbdf35ab6453ff | |
parent | a0e64a043ec498f959a214b5b02d6c7177984a0f (diff) | |
download | gcc-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.h | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/29_atomics/headers/stdatomic.h/115807.cc | 14 |
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>> ); +} |