mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-19 13:16:46 +00:00
[libc++] Systematically define a macro to check whether a feature is unavailable
Previously, we inconsistently defined whether a feature was unavailable on a given deployment target. We would have availability attributes for all features, but only some features had the equivalent of a _HAS_NO_FOO macro in the form of the DISABLE_FTM___foo macros. Instead, systematically define a _HAS_NO_FOO macro, which makes it easier to understand how to add availability markup for a new platform. Differential Revision: https://reviews.llvm.org/D147226
This commit is contained in:
parent
b060ca7042
commit
bec96f6e95
@ -39,17 +39,23 @@
|
||||
//
|
||||
// This mechanism is general in nature, and any vendor can add their markup to
|
||||
// the library (see below). Whenever a new feature is added that requires support
|
||||
// in the shared library, a macro should be added below to mark this feature
|
||||
// as unavailable. When vendors decide to ship the feature as part of their
|
||||
// shared library, they can update the markup appropriately.
|
||||
// in the shared library, two macros are added below to allow marking the feature
|
||||
// as unavailable:
|
||||
// 1. A macro named `_LIBCPP_AVAILABILITY_HAS_NO_<feature>` which must be defined
|
||||
// exactly when compiling for a target that doesn't support the feature.
|
||||
// 2. A macro named `_LIBCPP_AVAILABILITY_<feature>`, which must always be defined
|
||||
// and must expand to the proper availability attribute for the platform.
|
||||
//
|
||||
// When vendors decide to ship the feature as part of their shared library, they
|
||||
// can update these macros appropriately for their platform, and the library will
|
||||
// use those to provide an optimal user experience.
|
||||
//
|
||||
// Furthermore, many features in the standard library have corresponding
|
||||
// feature-test macros. When a feature is made unavailable on some deployment
|
||||
// target, a macro should be defined to signal that it is unavailable. That
|
||||
// macro can then be picked up when feature-test macros are generated (see
|
||||
// generate_feature_test_macro_components.py) to make sure that feature-test
|
||||
// macros don't announce a feature as being implemented if it has been marked
|
||||
// as unavailable.
|
||||
// feature-test macros. The `_LIBCPP_AVAILABILITY_HAS_NO_<feature>` macros
|
||||
// are checked by the corresponding feature-test macros generated by
|
||||
// generate_feature_test_macro_components.py to ensure that the library
|
||||
// doesn't announce a feature as being implemented if it is unavailable on
|
||||
// the deployment target.
|
||||
//
|
||||
// Note that this mechanism is disabled by default in the "upstream" libc++.
|
||||
// Availability annotations are only meaningful when shipping libc++ inside
|
||||
@ -83,9 +89,8 @@
|
||||
|
||||
// This controls the availability of std::shared_mutex and std::shared_timed_mutex,
|
||||
// which were added to the dylib later.
|
||||
// # define _LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX
|
||||
# define _LIBCPP_AVAILABILITY_SHARED_MUTEX
|
||||
// # define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex
|
||||
// # define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex
|
||||
|
||||
// These macros control the availability of std::bad_optional_access and
|
||||
// other exception types. These were put in the shared library to prevent
|
||||
@ -95,16 +100,23 @@
|
||||
// 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
|
||||
|
||||
// This controls the availability of std::uncaught_exceptions().
|
||||
// # define _LIBCPP_AVAILABILITY_HAS_NO_UNCAUGHT_EXCEPTIONS
|
||||
# define _LIBCPP_AVAILABILITY_UNCAUGHT_EXCEPTIONS
|
||||
|
||||
// This controls the availability of the sized version of ::operator delete,
|
||||
// ::operator delete[], and their align_val_t variants, which were all added
|
||||
// in C++17, and hence not present in early dylibs.
|
||||
// # define _LIBCPP_AVAILABILITY_HAS_NO_SIZED_NEW_DELETE
|
||||
# define _LIBCPP_AVAILABILITY_SIZED_NEW_DELETE
|
||||
|
||||
// This controls the availability of the std::future_error exception.
|
||||
@ -112,66 +124,78 @@
|
||||
// Note that when exceptions are disabled, the methods that normally throw
|
||||
// std::future_error can be used even on older deployment targets, but those
|
||||
// methods will abort instead of throwing.
|
||||
// # define _LIBCPP_AVAILABILITY_HAS_NO_FUTURE_ERROR
|
||||
# define _LIBCPP_AVAILABILITY_FUTURE_ERROR
|
||||
|
||||
// This controls the availability of std::type_info's vtable.
|
||||
// I can't imagine how using std::type_info can work at all if
|
||||
// this isn't supported.
|
||||
// # define _LIBCPP_AVAILABILITY_HAS_NO_TYPEINFO_VTABLE
|
||||
# define _LIBCPP_AVAILABILITY_TYPEINFO_VTABLE
|
||||
|
||||
// This controls the availability of std::locale::category members
|
||||
// (e.g. std::locale::collate), which are defined in the dylib.
|
||||
// # define _LIBCPP_AVAILABILITY_HAS_NO_LOCALE_CATEGORY
|
||||
# define _LIBCPP_AVAILABILITY_LOCALE_CATEGORY
|
||||
|
||||
// This controls the availability of atomic operations on std::shared_ptr
|
||||
// (e.g. `std::atomic_store(std::shared_ptr)`), which require a shared
|
||||
// lock table located in the dylib.
|
||||
// # define _LIBCPP_AVAILABILITY_HAS_NO_ATOMIC_SHARED_PTR
|
||||
# define _LIBCPP_AVAILABILITY_ATOMIC_SHARED_PTR
|
||||
|
||||
// These macros control the availability of all parts of <filesystem> that
|
||||
// depend on something in the dylib.
|
||||
// # define _LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM
|
||||
# define _LIBCPP_AVAILABILITY_FILESYSTEM
|
||||
# define _LIBCPP_AVAILABILITY_FILESYSTEM_PUSH
|
||||
# define _LIBCPP_AVAILABILITY_FILESYSTEM_POP
|
||||
// # define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem
|
||||
|
||||
// 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
|
||||
// # define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait
|
||||
// # define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier
|
||||
// # define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch
|
||||
// # define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore
|
||||
|
||||
// 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_HAS_NO_VERBOSE_ABORT_IN_LIBRARY
|
||||
// # define _LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT
|
||||
# define _LIBCPP_AVAILABILITY_VERBOSE_ABORT
|
||||
|
||||
#elif defined(__APPLE__)
|
||||
|
||||
// shared_mutex and shared_timed_mutex
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101200) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 30000)
|
||||
# define _LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_SHARED_MUTEX \
|
||||
__attribute__((availability(macos,strict,introduced=10.12))) \
|
||||
__attribute__((availability(ios,strict,introduced=10.0))) \
|
||||
__attribute__((availability(tvos,strict,introduced=10.0))) \
|
||||
__attribute__((availability(watchos,strict,introduced=3.0)))
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101200) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 30000)
|
||||
# define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex
|
||||
# define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex
|
||||
# endif
|
||||
|
||||
// bad_optional_access, bad_variant_access and bad_any_cast
|
||||
// Note: bad_optional_access & friends were not introduced in the matching
|
||||
// macOS and iOS versions, so the version mismatch between macOS and others
|
||||
// is intended.
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101300) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 120000) || \
|
||||
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 120000) || \
|
||||
(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_BAD_OPTIONAL_ACCESS \
|
||||
__attribute__((availability(macos,strict,introduced=10.13))) \
|
||||
__attribute__((availability(ios,strict,introduced=12.0))) \
|
||||
@ -182,33 +206,73 @@
|
||||
# define _LIBCPP_AVAILABILITY_BAD_ANY_CAST \
|
||||
_LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS
|
||||
|
||||
// uncaught_exceptions
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101200) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 30000)
|
||||
# define _LIBCPP_AVAILABILITY_HAS_NO_UNCAUGHT_EXCEPTIONS
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_UNCAUGHT_EXCEPTIONS \
|
||||
__attribute__((availability(macos,strict,introduced=10.12))) \
|
||||
__attribute__((availability(ios,strict,introduced=10.0))) \
|
||||
__attribute__((availability(tvos,strict,introduced=10.0))) \
|
||||
__attribute__((availability(watchos,strict,introduced=3.0)))
|
||||
|
||||
// sized operator new and sized operator delete
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101200) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 100000) || \
|
||||
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 30000)
|
||||
# define _LIBCPP_AVAILABILITY_HAS_NO_SIZED_NEW_DELETE
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_SIZED_NEW_DELETE \
|
||||
__attribute__((availability(macos,strict,introduced=10.12))) \
|
||||
__attribute__((availability(ios,strict,introduced=10.0))) \
|
||||
__attribute__((availability(tvos,strict,introduced=10.0))) \
|
||||
__attribute__((availability(watchos,strict,introduced=3.0)))
|
||||
|
||||
// future_error
|
||||
# if (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 60000)
|
||||
# define _LIBCPP_AVAILABILITY_HAS_NO_FUTURE_ERROR
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_FUTURE_ERROR \
|
||||
__attribute__((availability(ios,strict,introduced=6.0)))
|
||||
|
||||
// type_info's vtable
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 100900) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 70000)
|
||||
# define _LIBCPP_AVAILABILITY_HAS_NO_TYPEINFO_VTABLE
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_TYPEINFO_VTABLE \
|
||||
__attribute__((availability(macos,strict,introduced=10.9))) \
|
||||
__attribute__((availability(ios,strict,introduced=7.0)))
|
||||
|
||||
// locale::category
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 100900) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 70000)
|
||||
# define _LIBCPP_AVAILABILITY_HAS_NO_LOCALE_CATEGORY
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_LOCALE_CATEGORY \
|
||||
__attribute__((availability(macos,strict,introduced=10.9))) \
|
||||
__attribute__((availability(ios,strict,introduced=7.0)))
|
||||
|
||||
// atomic operations on shared_ptr
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 100900) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 70000)
|
||||
# define _LIBCPP_AVAILABILITY_HAS_NO_ATOMIC_SHARED_PTR
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_ATOMIC_SHARED_PTR \
|
||||
__attribute__((availability(macos,strict,introduced=10.9))) \
|
||||
__attribute__((availability(ios,strict,introduced=7.0)))
|
||||
|
||||
// <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
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_FILESYSTEM \
|
||||
__attribute__((availability(macos,strict,introduced=10.15))) \
|
||||
__attribute__((availability(ios,strict,introduced=13.0))) \
|
||||
@ -224,35 +288,39 @@
|
||||
_Pragma("clang attribute pop") \
|
||||
_Pragma("clang attribute pop") \
|
||||
_Pragma("clang attribute pop")
|
||||
# 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_DISABLE_FTM___cpp_lib_filesystem
|
||||
# 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_NO_TO_CHARS_FLOATING_POINT
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_TO_CHARS_FLOATING_POINT \
|
||||
__attribute__((availability(macos,strict,introduced=13.3))) \
|
||||
__attribute__((availability(ios,strict,introduced=16.3))) \
|
||||
__attribute__((availability(tvos,strict,introduced=16.3))) \
|
||||
__attribute__((availability(watchos,strict,introduced=9.3)))
|
||||
|
||||
// c++20 synchronization library
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 110000) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 140000) || \
|
||||
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 140000) || \
|
||||
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 70000)
|
||||
# define _LIBCPP_AVAILABILITY_HAS_NO_SYNC
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_SYNC \
|
||||
__attribute__((availability(macos,strict,introduced=11.0))) \
|
||||
__attribute__((availability(ios,strict,introduced=14.0))) \
|
||||
__attribute__((availability(tvos,strict,introduced=14.0))) \
|
||||
__attribute__((availability(watchos,strict,introduced=7.0)))
|
||||
# if (defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 110000) || \
|
||||
(defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 140000) || \
|
||||
(defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 140000) || \
|
||||
(defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 70000)
|
||||
# define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait
|
||||
# define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier
|
||||
# define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch
|
||||
# define _LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore
|
||||
# endif
|
||||
|
||||
# define _LIBCPP_HAS_NO_VERBOSE_ABORT_IN_LIBRARY
|
||||
// __libcpp_verbose_abort
|
||||
# if 1 // TODO: Update once this is released
|
||||
# define _LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT
|
||||
# endif
|
||||
# define _LIBCPP_AVAILABILITY_VERBOSE_ABORT \
|
||||
__attribute__((unavailable))
|
||||
|
||||
#else
|
||||
|
||||
|
@ -21,7 +21,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
// This function should never be called directly from the code -- it should only be called through
|
||||
// the _LIBCPP_VERBOSE_ABORT macro.
|
||||
_LIBCPP_NORETURN _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_ATTRIBUTE_FORMAT(__printf__, 1, 2)
|
||||
_LIBCPP_NORETURN _LIBCPP_AVAILABILITY_VERBOSE_ABORT _LIBCPP_OVERRIDABLE_FUNC_VIS _LIBCPP_ATTRIBUTE_FORMAT(__printf__, 1, 2)
|
||||
void __libcpp_verbose_abort(const char *__format, ...);
|
||||
|
||||
// _LIBCPP_VERBOSE_ABORT(format, args...)
|
||||
@ -40,17 +40,19 @@ 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_HAS_NO_VERBOSE_ABORT_IN_LIBRARY) && defined(_LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED)
|
||||
# undef _LIBCPP_HAS_NO_VERBOSE_ABORT_IN_LIBRARY
|
||||
# if defined(_LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT) && defined(_LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED)
|
||||
# undef _LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT
|
||||
# warning _LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED is deprecated, please customize _LIBCPP_VERBOSE_ABORT instead
|
||||
# endif
|
||||
|
||||
# if defined(_LIBCPP_HAS_NO_VERBOSE_ABORT_IN_LIBRARY)
|
||||
# if defined(_LIBCPP_AVAILABILITY_HAS_NO_VERBOSE_ABORT)
|
||||
// The decltype is there to suppress -Wunused warnings in this configuration.
|
||||
# define _LIBCPP_VERBOSE_ABORT(...) (decltype(std::__libcpp_verbose_abort(__VA_ARGS__))(), __builtin_abort())
|
||||
_LIBCPP_HIDE_FROM_ABI inline _LIBCPP_CONSTEXPR void __use(const char*, ...) { }
|
||||
# define _LIBCPP_VERBOSE_ABORT(...) (decltype(::std::__use(__VA_ARGS__))(), __builtin_abort())
|
||||
# else
|
||||
# define _LIBCPP_VERBOSE_ABORT(...) ::std::__libcpp_verbose_abort(__VA_ARGS__)
|
||||
# endif
|
||||
|
||||
#endif // !defined(_LIBCPP_VERBOSE_ABORT)
|
||||
|
||||
_LIBCPP_END_NAMESPACE_STD
|
||||
|
@ -225,7 +225,7 @@ __cpp_lib_void_t 201411L <type_traits>
|
||||
# define __cpp_lib_quoted_string_io 201304L
|
||||
# define __cpp_lib_result_of_sfinae 201210L
|
||||
# define __cpp_lib_robust_nonmodifying_seq_ops 201304L
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# define __cpp_lib_shared_timed_mutex 201402L
|
||||
# endif
|
||||
# define __cpp_lib_string_udls 201304L
|
||||
@ -250,7 +250,7 @@ __cpp_lib_void_t 201411L <type_traits>
|
||||
# define __cpp_lib_clamp 201603L
|
||||
# define __cpp_lib_enable_shared_from_this 201603L
|
||||
// # define __cpp_lib_execution 201603L
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)
|
||||
# define __cpp_lib_filesystem 201703L
|
||||
# endif
|
||||
# define __cpp_lib_gcd_lcm 201606L
|
||||
@ -278,7 +278,7 @@ __cpp_lib_void_t 201411L <type_traits>
|
||||
# define __cpp_lib_raw_memory_algorithms 201606L
|
||||
# define __cpp_lib_sample 201603L
|
||||
# define __cpp_lib_scoped_lock 201703L
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# define __cpp_lib_shared_mutex 201505L
|
||||
# endif
|
||||
# define __cpp_lib_shared_ptr_arrays 201611L
|
||||
@ -304,10 +304,10 @@ __cpp_lib_void_t 201411L <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_DISABLE_FTM___cpp_lib_atomic_wait)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# define __cpp_lib_atomic_wait 201907L
|
||||
# endif
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# define __cpp_lib_barrier 201907L
|
||||
# endif
|
||||
# define __cpp_lib_bind_front 201907L
|
||||
@ -338,7 +338,7 @@ __cpp_lib_void_t 201411L <type_traits>
|
||||
# define __cpp_lib_erase_if 202002L
|
||||
# undef __cpp_lib_execution
|
||||
// # define __cpp_lib_execution 201902L
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
|
||||
# if !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)
|
||||
// # define __cpp_lib_format 202106L
|
||||
# endif
|
||||
# define __cpp_lib_generic_unordered_lookup 201811L
|
||||
@ -352,7 +352,7 @@ __cpp_lib_void_t 201411L <type_traits>
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS)
|
||||
// # define __cpp_lib_jthread 201911L
|
||||
# endif
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# define __cpp_lib_latch 201907L
|
||||
# endif
|
||||
# define __cpp_lib_list_remove_return_type 201806L
|
||||
@ -361,7 +361,7 @@ __cpp_lib_void_t 201411L <type_traits>
|
||||
# define __cpp_lib_polymorphic_allocator 201902L
|
||||
# define __cpp_lib_ranges 202106L
|
||||
# define __cpp_lib_remove_cvref 201711L
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# define __cpp_lib_semaphore 201907L
|
||||
# endif
|
||||
# undef __cpp_lib_shared_ptr_arrays
|
||||
|
@ -6,6 +6,8 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
|
||||
// Make sure that we still support _LIBCPP_AVAILABILITY_CUSTOM_VERBOSE_ABORT_PROVIDED for folks
|
||||
// who customize the verbose termination function at link-time in back-deployment environments.
|
||||
|
||||
|
@ -13,6 +13,8 @@
|
||||
// The system-provided <uchar.h> seems to be broken on AIX, which trips up this test.
|
||||
// XFAIL: LIBCXX-AIX-FIXME
|
||||
|
||||
// XFAIL: availability-verbose_abort-missing
|
||||
|
||||
/*
|
||||
BEGIN-SCRIPT
|
||||
|
||||
|
@ -216,7 +216,7 @@
|
||||
# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++20"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_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_DISABLE_FTM___cpp_lib_atomic_wait)' is not met!"
|
||||
# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -311,7 +311,7 @@
|
||||
# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++2b"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_atomic_wait
|
||||
# error "__cpp_lib_atomic_wait should be defined in c++2b"
|
||||
# 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_DISABLE_FTM___cpp_lib_atomic_wait)' is not met!"
|
||||
# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
|
@ -44,7 +44,7 @@
|
||||
|
||||
#elif TEST_STD_VER == 20
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_barrier
|
||||
# error "__cpp_lib_barrier should be defined in c++20"
|
||||
# endif
|
||||
@ -53,13 +53,13 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_barrier
|
||||
# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)' is not met!"
|
||||
# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER > 20
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_barrier
|
||||
# error "__cpp_lib_barrier should be defined in c++2b"
|
||||
# endif
|
||||
@ -68,7 +68,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_barrier
|
||||
# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)' is not met!"
|
||||
# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
||||
# error "__cpp_lib_char8_t should not be defined before c++20"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)
|
||||
# ifndef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should be defined in c++17"
|
||||
# endif
|
||||
@ -60,7 +60,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)' is not met!"
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)
|
||||
# ifndef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should be defined in c++20"
|
||||
# endif
|
||||
@ -88,7 +88,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)' is not met!"
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -107,7 +107,7 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)
|
||||
# ifndef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should be defined in c++2b"
|
||||
# endif
|
||||
@ -116,7 +116,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)' is not met!"
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
|
@ -44,7 +44,7 @@
|
||||
|
||||
#elif TEST_STD_VER == 20
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_latch
|
||||
# error "__cpp_lib_latch should be defined in c++20"
|
||||
# endif
|
||||
@ -53,13 +53,13 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_latch
|
||||
# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)' is not met!"
|
||||
# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER > 20
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_latch
|
||||
# error "__cpp_lib_latch should be defined in c++2b"
|
||||
# endif
|
||||
@ -68,7 +68,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_latch
|
||||
# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)' is not met!"
|
||||
# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
|
@ -44,7 +44,7 @@
|
||||
|
||||
#elif TEST_STD_VER == 20
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_semaphore
|
||||
# error "__cpp_lib_semaphore should be defined in c++20"
|
||||
# endif
|
||||
@ -53,13 +53,13 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_semaphore
|
||||
# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)' is not met!"
|
||||
# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER > 20
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_semaphore
|
||||
# error "__cpp_lib_semaphore should be defined in c++2b"
|
||||
# endif
|
||||
@ -68,7 +68,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_semaphore
|
||||
# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)' is not met!"
|
||||
# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
||||
# error "__cpp_lib_shared_mutex should not be defined before c++17"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should be defined in c++14"
|
||||
# endif
|
||||
@ -50,13 +50,13 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER == 17
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should be defined in c++17"
|
||||
# endif
|
||||
@ -65,11 +65,11 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should be defined in c++17"
|
||||
# endif
|
||||
@ -78,13 +78,13 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER == 20
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should be defined in c++20"
|
||||
# endif
|
||||
@ -93,11 +93,11 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should be defined in c++20"
|
||||
# endif
|
||||
@ -106,13 +106,13 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#elif TEST_STD_VER > 20
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should be defined in c++2b"
|
||||
# endif
|
||||
@ -121,11 +121,11 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should be defined in c++2b"
|
||||
# endif
|
||||
@ -134,7 +134,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
|
@ -1395,7 +1395,7 @@
|
||||
# error "__cpp_lib_shared_ptr_weak_type should not be defined before c++17"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should be defined in c++14"
|
||||
# endif
|
||||
@ -1404,7 +1404,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -1838,7 +1838,7 @@
|
||||
# error "__cpp_lib_expected should not be defined before c++2b"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)
|
||||
# ifndef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should be defined in c++17"
|
||||
# endif
|
||||
@ -1847,7 +1847,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)' is not met!"
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -2239,7 +2239,7 @@
|
||||
# error "__cpp_lib_semaphore should not be defined before c++20"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should be defined in c++17"
|
||||
# endif
|
||||
@ -2248,7 +2248,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -2266,7 +2266,7 @@
|
||||
# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++17"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should be defined in c++17"
|
||||
# endif
|
||||
@ -2275,7 +2275,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -2575,7 +2575,7 @@
|
||||
# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++20"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_atomic_wait
|
||||
# error "__cpp_lib_atomic_wait should be defined in c++20"
|
||||
# endif
|
||||
@ -2584,11 +2584,11 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_atomic_wait
|
||||
# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)' is not met!"
|
||||
# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_barrier
|
||||
# error "__cpp_lib_barrier should be defined in c++20"
|
||||
# endif
|
||||
@ -2597,7 +2597,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_barrier
|
||||
# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)' is not met!"
|
||||
# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -2877,7 +2877,7 @@
|
||||
# error "__cpp_lib_expected should not be defined before c++2b"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)
|
||||
# ifndef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should be defined in c++20"
|
||||
# endif
|
||||
@ -2886,7 +2886,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)' is not met!"
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -3100,7 +3100,7 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_latch
|
||||
# error "__cpp_lib_latch should be defined in c++20"
|
||||
# endif
|
||||
@ -3109,7 +3109,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_latch
|
||||
# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)' is not met!"
|
||||
# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -3355,7 +3355,7 @@
|
||||
# error "__cpp_lib_scoped_lock should have the value 201703L in c++20"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_semaphore
|
||||
# error "__cpp_lib_semaphore should be defined in c++20"
|
||||
# endif
|
||||
@ -3364,11 +3364,11 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_semaphore
|
||||
# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)' is not met!"
|
||||
# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should be defined in c++20"
|
||||
# endif
|
||||
@ -3377,7 +3377,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -3395,7 +3395,7 @@
|
||||
# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++20"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should be defined in c++20"
|
||||
# endif
|
||||
@ -3404,7 +3404,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -3779,7 +3779,7 @@
|
||||
# error "__cpp_lib_atomic_value_initialization should have the value 201911L in c++2b"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_atomic_wait
|
||||
# error "__cpp_lib_atomic_wait should be defined in c++2b"
|
||||
# endif
|
||||
@ -3788,11 +3788,11 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_atomic_wait
|
||||
# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)' is not met!"
|
||||
# error "__cpp_lib_atomic_wait should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_barrier
|
||||
# error "__cpp_lib_barrier should be defined in c++2b"
|
||||
# endif
|
||||
@ -3801,7 +3801,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_barrier
|
||||
# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)' is not met!"
|
||||
# error "__cpp_lib_barrier should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -4114,7 +4114,7 @@
|
||||
# error "__cpp_lib_expected should have the value 202202L in c++2b"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)
|
||||
# if !defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)
|
||||
# ifndef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should be defined in c++2b"
|
||||
# endif
|
||||
@ -4123,7 +4123,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_filesystem
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)' is not met!"
|
||||
# error "__cpp_lib_filesystem should not be defined when the requirement '!defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -4346,7 +4346,7 @@
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_latch
|
||||
# error "__cpp_lib_latch should be defined in c++2b"
|
||||
# endif
|
||||
@ -4355,7 +4355,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_latch
|
||||
# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)' is not met!"
|
||||
# error "__cpp_lib_latch should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -4703,7 +4703,7 @@
|
||||
# error "__cpp_lib_scoped_lock should have the value 201703L in c++2b"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)
|
||||
# ifndef __cpp_lib_semaphore
|
||||
# error "__cpp_lib_semaphore should be defined in c++2b"
|
||||
# endif
|
||||
@ -4712,11 +4712,11 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_semaphore
|
||||
# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)' is not met!"
|
||||
# error "__cpp_lib_semaphore should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should be defined in c++2b"
|
||||
# endif
|
||||
@ -4725,7 +4725,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_mutex
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
@ -4743,7 +4743,7 @@
|
||||
# error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++2b"
|
||||
# endif
|
||||
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)
|
||||
# if !defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)
|
||||
# ifndef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should be defined in c++2b"
|
||||
# endif
|
||||
@ -4752,7 +4752,7 @@
|
||||
# endif
|
||||
# else
|
||||
# ifdef __cpp_lib_shared_timed_mutex
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)' is not met!"
|
||||
# error "__cpp_lib_shared_timed_mutex should not be defined when the requirement '!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)' is not met!"
|
||||
# endif
|
||||
# endif
|
||||
|
||||
|
@ -48,9 +48,7 @@ def add_version_header(tc):
|
||||
# just libc++. It may depend on
|
||||
# * macros defined by the compiler itself, or
|
||||
# * macros generated by CMake.
|
||||
# In some cases we add
|
||||
# `&& !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM_...)`
|
||||
# in order to make libc++ pass the tests on OSX; see D94983.
|
||||
# In some cases we add also depend on macros defined in <__availability>.
|
||||
# libcxx_guard An optional string field. When this field is provided,
|
||||
# `test_suite_guard` must also be provided. This field is used
|
||||
# only to guard the feature-test macro in <version>. It may
|
||||
@ -138,14 +136,14 @@ feature_test_macros = [ add_version_header(x) for x in [
|
||||
"name": "__cpp_lib_atomic_wait",
|
||||
"values": { "c++20": 201907 },
|
||||
"headers": ["atomic"],
|
||||
"test_suite_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_atomic_wait)",
|
||||
"test_suite_guard": "!defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)",
|
||||
}, {
|
||||
"name": "__cpp_lib_barrier",
|
||||
"values": { "c++20": 201907 },
|
||||
"headers": ["barrier"],
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_barrier)",
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)",
|
||||
}, {
|
||||
"name": "__cpp_lib_bind_back",
|
||||
"values": { "c++2b": 202202 },
|
||||
@ -314,8 +312,8 @@ feature_test_macros = [ add_version_header(x) for x in [
|
||||
"name": "__cpp_lib_filesystem",
|
||||
"values": { "c++17": 201703 },
|
||||
"headers": ["filesystem"],
|
||||
"test_suite_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_filesystem)"
|
||||
"test_suite_guard": "!defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_AVAILABILITY_HAS_NO_FILESYSTEM)"
|
||||
}, {
|
||||
"name": "__cpp_lib_format",
|
||||
"values": {
|
||||
@ -326,8 +324,8 @@ feature_test_macros = [ add_version_header(x) for x in [
|
||||
# "c++23": 202207, Not implemented P2419R2 Clarify handling of encodings in localized formatting of chrono types
|
||||
},
|
||||
"headers": ["format"],
|
||||
"test_suite_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_format) && !defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_INCOMPLETE_FORMAT)",
|
||||
"unimplemented": True,
|
||||
}, {
|
||||
"name": "__cpp_lib_forward_like",
|
||||
@ -444,8 +442,8 @@ feature_test_macros = [ add_version_header(x) for x in [
|
||||
"name": "__cpp_lib_latch",
|
||||
"values": { "c++20": 201907 },
|
||||
"headers": ["latch"],
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_latch)",
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)",
|
||||
}, {
|
||||
"name": "__cpp_lib_launder",
|
||||
"values": { "c++17": 201606 },
|
||||
@ -615,14 +613,14 @@ feature_test_macros = [ add_version_header(x) for x in [
|
||||
"name": "__cpp_lib_semaphore",
|
||||
"values": { "c++20": 201907 },
|
||||
"headers": ["semaphore"],
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_semaphore)",
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SYNC)",
|
||||
}, {
|
||||
"name": "__cpp_lib_shared_mutex",
|
||||
"values": { "c++17": 201505 },
|
||||
"headers": ["shared_mutex"],
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_mutex)",
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)",
|
||||
}, {
|
||||
"name": "__cpp_lib_shared_ptr_arrays",
|
||||
"values": { "c++17": 201611, "c++20": 201707 },
|
||||
@ -635,8 +633,8 @@ feature_test_macros = [ add_version_header(x) for x in [
|
||||
"name": "__cpp_lib_shared_timed_mutex",
|
||||
"values": { "c++14": 201402 },
|
||||
"headers": ["shared_mutex"],
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_DISABLE_FTM___cpp_lib_shared_timed_mutex)",
|
||||
"test_suite_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)",
|
||||
"libcxx_guard": "!defined(_LIBCPP_HAS_NO_THREADS) && !defined(_LIBCPP_AVAILABILITY_HAS_NO_SHARED_MUTEX)",
|
||||
}, {
|
||||
"name": "__cpp_lib_shift",
|
||||
"values": { "c++20": 201806 },
|
||||
|
Loading…
x
Reference in New Issue
Block a user