[libc++] Enable <atomic> when threads are disabled
std::atomic is, for the most part, just a thin veneer on top of compiler
builtins. Hence, it should be available even when threads are not available
on the system, and in fact there has been requests for such support.
This patch:
- Moves __libcpp_thread_poll_with_backoff to its own header so it can
be used in <atomic> when threads are disabled.
- Adds a dummy backoff policy for atomic polling that doesn't know about
threads.
- Adjusts the <atomic> feature-test macros so they are provided even when
threads are disabled.
- Runs the <atomic> tests when threads are disabled.
rdar://77873569
Differential Revision: https://reviews.llvm.org/D114109
NOKEYCHECK=True
GitOrigin-RevId: 92832e4889ae6038cc8b3e6e449af2a9b9374ab4
diff --git a/include/version b/include/version
index a4809eb..d2286f5 100644
--- a/include/version
+++ b/include/version
@@ -205,9 +205,7 @@
# define __cpp_lib_apply 201603L
# define __cpp_lib_array_constexpr 201603L
# define __cpp_lib_as_const 201510L
-# if !defined(_LIBCPP_HAS_NO_THREADS)
-# define __cpp_lib_atomic_is_always_lock_free 201603L
-# endif
+# define __cpp_lib_atomic_is_always_lock_free 201603L
# define __cpp_lib_bool_constant 201505L
// # define __cpp_lib_boyer_moore_searcher 201603L
# define __cpp_lib_byte 201603L
@@ -261,25 +259,13 @@
# undef __cpp_lib_array_constexpr
# define __cpp_lib_array_constexpr 201811L
// # define __cpp_lib_assume_aligned 201811L
-# if !defined(_LIBCPP_HAS_NO_THREADS)
-# define __cpp_lib_atomic_flag_test 201907L
-# endif
-# if !defined(_LIBCPP_HAS_NO_THREADS)
-// # define __cpp_lib_atomic_float 201711L
-# endif
-# if !defined(_LIBCPP_HAS_NO_THREADS)
-# define __cpp_lib_atomic_lock_free_type_aliases 201907L
-# endif
-# if !defined(_LIBCPP_HAS_NO_THREADS)
-// # define __cpp_lib_atomic_ref 201806L
-# endif
-# if !defined(_LIBCPP_HAS_NO_THREADS)
-// # define __cpp_lib_atomic_shared_ptr 201711L
-# endif
-# if !defined(_LIBCPP_HAS_NO_THREADS)
-# define __cpp_lib_atomic_value_initialization 201911L
-# endif
-# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)
+# 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_shared_ptr 201711L
+# define __cpp_lib_atomic_value_initialization 201911L
+# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)
# define __cpp_lib_atomic_wait 201907L
# endif
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)