aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2022-12-12 12:49:40 +0000
committerJonathan Wakely <jwakely@redhat.com>2022-12-12 14:00:09 +0000
commit320ac807da125e6dc952b3d4abf02daeead88d44 (patch)
tree1c7284882b370bda155cd16bee43f38d4dc27db5 /libstdc++-v3/include/std
parent2327d9331430777006008ab3b051afe2b4fc15bd (diff)
downloadgcc-320ac807da125e6dc952b3d4abf02daeead88d44.zip
gcc-320ac807da125e6dc952b3d4abf02daeead88d44.tar.gz
gcc-320ac807da125e6dc952b3d4abf02daeead88d44.tar.bz2
libstdc++: Define atomic lock-free type aliases for C++20 [PR98034]
libstdc++-v3/ChangeLog: PR libstdc++/98034 * include/std/atomic (__cpp_lib_atomic_lock_free_type_aliases): Define macro. (atomic_signed_lock_free, atomic_unsigned_lock_free): Define aliases. * include/std/version (__cpp_lib_atomic_lock_free_type_aliases): Define macro. * testsuite/29_atomics/atomic/lock_free_aliases.cc: New test.
Diffstat (limited to 'libstdc++-v3/include/std')
-rw-r--r--libstdc++-v3/include/std/atomic17
-rw-r--r--libstdc++-v3/include/std/version1
2 files changed, 18 insertions, 0 deletions
diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic
index 356f145..857f927 100644
--- a/libstdc++-v3/include/std/atomic
+++ b/libstdc++-v3/include/std/atomic
@@ -1727,6 +1727,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
using __atomic_ref<_Tp>::operator=;
};
+#define __cpp_lib_atomic_lock_free_type_aliases 201907L
+#ifdef _GLIBCXX_HAVE_PLATFORM_WAIT
+ using atomic_signed_lock_free
+ = atomic<make_signed_t<__detail::__platform_wait_t>>;
+ using atomic_unsigned_lock_free
+ = atomic<make_unsigned_t<__detail::__platform_wait_t>>;
+#elif ATOMIC_INT_LOCK_FREE || !(ATOMIC_LONG_LOCK_FREE || ATOMIC_CHAR_LOCK_FREE)
+ using atomic_signed_lock_free = atomic<signed int>;
+ using atomic_unsigned_lock_free = atomic<unsigned int>;
+#elif ATOMIC_LONG_LOCK_FREE
+ using atomic_signed_lock_free = atomic<signed long>;
+ using atomic_unsigned_lock_free = atomic<unsigned long>;
+#elif ATOMIC_CHAR_LOCK_FREE
+ using atomic_signed_lock_free = atomic<signed char>;
+ using atomic_unsigned_lock_free = atomic<unsigned char>;
+#endif
+
#endif // C++2a
/// @} group atomics
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index 3c7c440..61718eb 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -187,6 +187,7 @@
#define __cpp_lib_assume_aligned 201811L
#define __cpp_lib_atomic_flag_test 201907L
#define __cpp_lib_atomic_float 201711L
+#define __cpp_lib_atomic_lock_free_type_aliases 201907L
#define __cpp_lib_atomic_ref 201806L
#define __cpp_lib_atomic_value_initialization 201911L
#define __cpp_lib_bind_front 201907L