[libcxx-commits] [libcxx] [libc++][NFC] Refactor _LIBCPP_AVAILABILITY_HAS_* macros to always be defined (PR #71002)
via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Nov 1 16:40:33 PDT 2023
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libcxx
Author: None (philnik777)
<details>
<summary>Changes</summary>
This makes the conditionals quite a bit simpler to understand, since it
avoids double negatives and makes sure we have <__availability>
included. For vendors which use availability macros, it also enforces
that they check when specific features are introduced and define the
macro for their platform appropriately.
---
Patch is 47.45 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/71002.diff
9 Files Affected:
- (modified) libcxx/include/__availability (+94-86)
- (modified) libcxx/include/__verbose_abort (+4-3)
- (modified) libcxx/include/version (+5-5)
- (modified) libcxx/test/std/language.support/support.limits/support.limits.general/atomic.version.compile.pass.cpp (+6-6)
- (modified) libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.compile.pass.cpp (+6-6)
- (modified) libcxx/test/std/language.support/support.limits/support.limits.general/filesystem.version.compile.pass.cpp (+8-8)
- (modified) libcxx/test/std/language.support/support.limits/support.limits.general/memory_resource.version.compile.pass.cpp (+14-14)
- (modified) libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp (+34-34)
- (modified) libcxx/utils/generate_feature_test_macro_components.py (+10-10)
``````````diff
diff --git a/libcxx/include/__availability b/libcxx/include/__availability
index 99a16c968de3c60..5c71b904ae1a4ea 100644
--- a/libcxx/include/__availability
+++ b/libcxx/include/__availability
@@ -87,57 +87,57 @@
#if defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
- // These macros control the availability of std::bad_optional_access and
- // other exception types. These were put in the shared library to prevent
- // code bloat from every user program defining the vtable for these exception
- // types.
- //
- // Note that when exceptions are disabled, the methods that normally throw
- // these exceptions can be used even on older deployment targets, but those
- // methods will abort instead of throwing.
-// # define _LIBCPP_AVAILABILITY_HAS_NO_BAD_OPTIONAL_ACCESS
-# define _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
-
-// # define _LIBCPP_AVAILABILITY_HAS_NO_BAD_VARIANT_ACCESS
-# define _LIBCPP_AVAILABILITY_BAD_VARIANT_ACCESS
-
-// # define _LIBCPP_AVAILABILITY_HAS_NO_BAD_ANY_CAST
-# define _LIBCPP_AVAILABILITY_BAD_ANY_CAST
-
- // These macros control the availability of all parts of <filesystem> that
- // depend on something in the dylib.
-// # define _LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM_LIBRARY
-# define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY
-# define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_PUSH
-# define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_POP
-
- // This controls the availability of floating-point std::to_chars functions.
- // These overloads were added later than the integer overloads.
-// # define _LIBCPP_AVAILABILITY_HAS_NO_TO_CHARS_FLOATING_POINT
-# define _LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT
-
- // This controls the availability of the C++20 synchronization library,
- // which requires shared library support for various operations
- // (see libcxx/src/atomic.cpp). This includes <barier>, <latch>,
- // <semaphore>, and notification functions on std::atomic.
-// # define _LIBCPP_AVAILABILITY_HAS_NO_SYNC
-# define _LIBCPP_AVAILABILITY_SYNC
-
- // This controls whether the library claims to provide a default verbose
- // termination function, and consequently whether the headers will try
- // to use it when the mechanism isn't overriden at compile-time.
-// # define _LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT
-# define _LIBCPP_AVAILABILITY_VERBOSE_ABORT
-
- // This controls the availability of the C++17 std::pmr library,
- // which is implemented in large part in the built library.
-// # define _LIBCPP_AVAILABILITY_HAS_NO_PMR
-# define _LIBCPP_AVAILABILITY_PMR
-
- // This controls the availability of the C++20 time zone database.
- // The parser code is built in the library.
-// # define _LIBCPP_AVAILABILITY_HAS_NO_TZDB
-# define _LIBCPP_AVAILABILITY_TZDB
+// These macros control the availability of std::bad_optional_access and
+// other exception types. These were put in the shared library to prevent
+// code bloat from every user program defining the vtable for these exception
+// types.
+//
+// Note that when exceptions are disabled, the methods that normally throw
+// these exceptions can be used even on older deployment targets, but those
+// methods will abort instead of throwing.
+# define _LIBCPP_AVAILABILITY_HAS_BAD_OPTIONAL_ACCESS 1
+# define _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
+
+# define _LIBCPP_AVAILABILITY_HAS_BAD_VARIANT_ACCESS 1
+# define _LIBCPP_AVAILABILITY_BAD_VARIANT_ACCESS
+
+# define _LIBCPP_AVAILABILITY_HAS_BAD_ANY_CAST 1
+# define _LIBCPP_AVAILABILITY_BAD_ANY_CAST
+
+// These macros control the availability of all parts of <filesystem> that
+// depend on something in the dylib.
+# define _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY 1
+# define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY
+# define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_PUSH
+# define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY_POP
+
+// This controls the availability of floating-point std::to_chars functions.
+// These overloads were added later than the integer overloads.
+# define _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT 1
+# define _LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT
+
+// This controls the availability of the C++20 synchronization library,
+// which requires shared library support for various operations
+// (see libcxx/src/atomic.cpp). This includes <barier>, <latch>,
+// <semaphore>, and notification functions on std::atomic.
+# define _LIBCPP_AVAILABILITY_HAS_NO_SYNC
+# define _LIBCPP_AVAILABILITY_SYNC
+
+// This controls whether the library claims to provide a default verbose
+// termination function, and consequently whether the headers will try
+// to use it when the mechanism isn't overriden at compile-time.
+# define _LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT 1
+# define _LIBCPP_AVAILABILITY_VERBOSE_ABORT
+
+// This controls the availability of the C++17 std::pmr library,
+// which is implemented in large part in the built library.
+# define _LIBCPP_AVAILABILITY_HAS_PMR 1
+# define _LIBCPP_AVAILABILITY_PMR
+
+// This controls the availability of the C++20 time zone database.
+// The parser code is built in the library.
+# define _LIBCPP_AVAILABILITY_HAS_TZDB 1
+# define _LIBCPP_AVAILABILITY_TZDB
// Enable additional explicit instantiations of iostreams components. This
// reduces the number of weak definitions generated in programs that use
@@ -146,28 +146,30 @@
// TODO: Enable additional explicit instantiations on GCC once it supports exclude_from_explicit_instantiation,
// or once libc++ doesn't use the attribute anymore.
// TODO: Enable them on Windows once https://llvm.org/PR41018 has been fixed.
-#if defined(_LIBCPP_COMPILER_GCC) || defined(_WIN32)
-# define _LIBCPP_AVAILABILITY_HAS_NO_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1
-#endif
+# define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 \
+ !defined(_LIBCPP_COMPILER_GCC) && !defined(_WIN32)
#elif defined(__APPLE__)
-# if (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 50000)
-# define _LIBCPP_AVAILABILITY_HAS_NO_BAD_OPTIONAL_ACCESS
-# define _LIBCPP_AVAILABILITY_HAS_NO_BAD_VARIANT_ACCESS
-# define _LIBCPP_AVAILABILITY_HAS_NO_BAD_ANY_CAST
-# endif
+# define _LIBCPP_AVAILABILITY_HAS_BAD_OPTIONAL_ACCESS \
+ (!defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) || __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 50000)
+
+# define _LIBCPP_AVAILABILITY_HAS_BAD_VARIANT_ACCESS _LIBCPP_AVAILABILITY_HAS_BAD_OPTIONAL_ACCESS
+# define _LIBCPP_AVAILABILITY_HAS_BAD_ANY_CAST _LIBCPP_AVAILABILITY_HAS_BAD_OPTIONAL_ACCESS
+
# define _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS __attribute__((availability(watchos,strict,introduced=5.0)))
# define _LIBCPP_AVAILABILITY_BAD_VARIANT_ACCESS _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
# define _LIBCPP_AVAILABILITY_BAD_ANY_CAST _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
- // <filesystem>
-# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101500) || \
- (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 130000) || \
- (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 130000) || \
- (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 60000)
-# define _LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM_LIBRARY
-# endif
+// <filesystem>
+# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101500) || \
+ (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 130000) || \
+ (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 130000) || \
+ (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 60000)
+# define _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY 0
+# else
+# define _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY 1
+# endif
# define _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY \
__attribute__((availability(macos,strict,introduced=10.15))) \
__attribute__((availability(ios,strict,introduced=13.0))) \
@@ -184,13 +186,15 @@
_Pragma("clang attribute pop") \
_Pragma("clang attribute pop")
- // std::to_chars(floating-point)
-# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 130300) || \
- (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 160300) || \
- (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 160300) || \
- (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 90300)
-# define _LIBCPP_AVAILABILITY_HAS_NO_TO_CHARS_FLOATING_POINT
-# endif
+// std::to_chars(floating-point)
+# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 130300) || \
+ (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 160300) || \
+ (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 160300) || \
+ (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 90300)
+# define _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT 0
+# else
+# define _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT 1
+# endif
# define _LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT \
__attribute__((availability(macos,strict,introduced=13.3))) \
__attribute__((availability(ios,strict,introduced=16.3))) \
@@ -210,20 +214,22 @@
__attribute__((availability(tvos,strict,introduced=14.0))) \
__attribute__((availability(watchos,strict,introduced=7.0)))
- // __libcpp_verbose_abort
-# if 1 // TODO: Update once this is released
-# define _LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT
-# endif
+// __libcpp_verbose_abort
+// TODO: Update once this is released
+# define _LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT 0
+
# define _LIBCPP_AVAILABILITY_VERBOSE_ABORT \
__attribute__((unavailable))
- // std::pmr
-# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 140000) || \
- (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 170000) || \
- (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 170000) || \
- (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 100000)
-# define _LIBCPP_AVAILABILITY_HAS_NO_PMR
-# endif
+// std::pmr
+# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 140000) || \
+ (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 170000) || \
+ (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 170000) || \
+ (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 100000)
+# define _LIBCPP_AVAILABILITY_HAS_PMR 0
+# else
+# define _LIBCPP_AVAILABILITY_HAS_PMR 1
+# endif
// TODO: Enable std::pmr markup once https://github.com/llvm/llvm-project/issues/40340 has been fixed
// Until then, it is possible for folks to try to use `std::pmr` when back-deploying to targets that don't support
// it and it'll be a load-time error, but we don't have a good alternative because the library won't compile if we
@@ -238,14 +244,16 @@
# define _LIBCPP_AVAILABILITY_PMR
# endif
-# define _LIBCPP_AVAILABILITY_HAS_NO_TZDB
+# define _LIBCPP_AVAILABILITY_HAS_TZDB 0
# define _LIBCPP_AVAILABILITY_TZDB __attribute__((unavailable))
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 120000) || \
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 150000) || \
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 150000) || \
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 80000)
-# define _LIBCPP_AVAILABILITY_HAS_NO_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1
+# define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 0
+# else
+# define _LIBCPP_AVAILABILITY_HAS_ADDITIONAL_IOSTREAM_EXPLICIT_INSTANTIATIONS_1 1
# endif
#else
diff --git a/libcxx/include/__verbose_abort b/libcxx/include/__verbose_abort
index a38284b711f3628..accd596b088601c 100644
--- a/libcxx/include/__verbose_abort
+++ b/libcxx/include/__verbose_abort
@@ -40,12 +40,13 @@ void __libcpp_verbose_abort(const char *__format, ...);
// Support _LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED until LLVM 18, but tell people
// to move to customizing _LIBCPP_VERBOSE_ABORT instead.
-# if defined(_LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT) && defined(_LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED)
-# undef _LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT
+# if !_LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT && defined(_LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED)
+# undef _LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT
+# define _LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT 1
# warning _LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED is deprecated, please customize _LIBCPP_VERBOSE_ABORT instead
# endif
-# if defined(_LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT)
+# if !_LIBCPP_AVAILABILITY_HAS_VERBOSE_ABORT
// The decltype is there to suppress -Wunused warnings in this configuration.
void __use(const char*, ...);
# define _LIBCPP_VERBOSE_ABORT(...) (decltype(::std::__use(__VA_ARGS__))(), __builtin_abort())
diff --git a/libcxx/include/version b/libcxx/include/version
index 3c8e1a132e87f85..9d96ef25cbf67c2 100644
--- a/libcxx/include/version
+++ b/libcxx/include/version
@@ -273,7 +273,7 @@ __cpp_lib_within_lifetime 202306L <type_traits>
# define __cpp_lib_clamp 201603L
# define __cpp_lib_enable_shared_from_this 201603L
// # define __cpp_lib_execution 201603L
-# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM_LIBRARY)
+# if _LIBCPP_AVAILABILITY_HAS_FILESYSTEM_LIBRARY
# define __cpp_lib_filesystem 201703L
# endif
# define __cpp_lib_gcd_lcm 201606L
@@ -292,7 +292,7 @@ __cpp_lib_within_lifetime 202306L <type_traits>
# define __cpp_lib_make_from_tuple 201606L
# define __cpp_lib_map_try_emplace 201411L
// # define __cpp_lib_math_special_functions 201603L
-# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_PMR)
+# if _LIBCPP_AVAILABILITY_HAS_PMR
# define __cpp_lib_memory_resource 201603L
# endif
# define __cpp_lib_node_extract 201606L
@@ -329,10 +329,10 @@ __cpp_lib_within_lifetime 202306L <type_traits>
// # define __cpp_lib_atomic_ref 201806L
// # define __cpp_lib_atomic_shared_ptr 201711L
# define __cpp_lib_atomic_value_initialization 201911L
-# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
+# if _LIBCPP_AVAILABILITY_HAS_SYNC
# define __cpp_lib_atomic_wait 201907L
# endif
-# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
+# if !defined(_LIBCPP_HAS_NO_THREADS) && _LIBCPP_AVAILABILITY_HAS_SYNC
# define __cpp_lib_barrier 201907L
# endif
# define __cpp_lib_bind_front 201907L
@@ -381,7 +381,7 @@ __cpp_lib_within_lifetime 202306L <type_traits>
# define __cpp_lib_list_remove_return_type 201806L
# define __cpp_lib_math_constants 201907L
# define __cpp_lib_move_iterator_concept 202207L
-# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_PMR)
+# if _LIBCPP_AVAILABILITY_HAS_PMR
# define __cpp_lib_polymorphic_allocator 201902L
# endif
# define __cpp_lib_ranges 202207L
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/atomic.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/atomic.version.compile.pass.cpp
index ebb7efb5eb593ac..ded743716f33c1d 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/atomic.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/atomic.version.compile.pass.cpp
@@ -216,7 +216,7 @@
# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++20"
# endif
-# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
+# if !defined(_LIBCPP_AVAILABILITY_HAS_SYNC) || _LIBCPP_AVAILABILITY_HAS_SYNC
# ifndef __cpp_lib_atomic_wait
# error "__cpp_lib_atomic_wait should be defined in c++20"
# endif
@@ -225,7 +225,7 @@
# endif
# else
# ifdef __cpp_lib_atomic_wait
-# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
+# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_SYNC) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!"
# endif
# endif
@@ -311,7 +311,7 @@
# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++23"
# endif
-# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
+# if !defined(_LIBCPP_AVAILABILITY_HAS_SYNC) || _LIBCPP_AVAILABILITY_HAS_SYNC
# ifndef __cpp_lib_atomic_wait
# error "__cpp_lib_atomic_wait should be defined in c++23"
# endif
@@ -320,7 +320,7 @@
# endif
# else
# ifdef __cpp_lib_atomic_wait
-# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
+# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_SYNC) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!"
# endif
# endif
@@ -406,7 +406,7 @@
# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++26"
# endif
-# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
+# if !defined(_LIBCPP_AVAILABILITY_HAS_SYNC) || _LIBCPP_AVAILABILITY_HAS_SYNC
# ifndef __cpp_lib_atomic_wait
# error "__cpp_lib_atomic_wait should be defined in c++26"
# endif
@@ -415,7 +415,7 @@
# endif
# else
# ifdef __cpp_lib_atomic_wait
-# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
+# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_SYNC) || _LIBCPP_AVAILABILITY_HAS_SYNC' is not met!"
# endif
# endif
diff --git a/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.compile.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.compile.pass.cpp
index 33e8a3c23a9e5b0..9aa0fe38d7f862d 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.compile.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.comp...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/71002
More information about the libcxx-commits
mailing list