[libcxx-commits] [libcxx] 466df17 - [libc++] Update generate_feature_test_macro_components.py to match SD-6.

Arthur O'Dwyer via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jan 8 08:45:20 PST 2021


Author: Arthur O'Dwyer
Date: 2021-01-08T11:44:39-05:00
New Revision: 466df1718e41fe2fca6ce6bd98c01b18f42c05e4

URL: https://github.com/llvm/llvm-project/commit/466df1718e41fe2fca6ce6bd98c01b18f42c05e4
DIFF: https://github.com/llvm/llvm-project/commit/466df1718e41fe2fca6ce6bd98c01b18f42c05e4.diff

LOG: [libc++] Update generate_feature_test_macro_components.py to match SD-6.

It's still a little confusing because in many cases C++17 and C++20
have different values, and libc++ implements the C++17 behavior but
not the C++20 behavior; 'unimplemented' can't represent that scenario.
Ultimately we probably ought to completely redesign the script to be
in terms of paper numbers, rather than language revisions, and make
it generate the CSV files like "Cxx2aStatusPaperStatus.csv" as well.

Most newly added macros are unimplemented. I've marked a few as implemented,
though, based on my reading of the code; for example I was pretty sure
`__cpp_lib_latch` is implemented since we have `<latch>`.

Differential Revision: https://reviews.llvm.org/D93830

Added: 
    libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/latch.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/semaphore.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.pass.cpp

Modified: 
    libcxx/docs/FeatureTestMacroTable.rst
    libcxx/include/version
    libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/compare.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp
    libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp
    libcxx/utils/generate_feature_test_macro_components.py

Removed: 
    


################################################################################
diff  --git a/libcxx/docs/FeatureTestMacroTable.rst b/libcxx/docs/FeatureTestMacroTable.rst
index 895e96f97d63..377ea582743f 100644
--- a/libcxx/docs/FeatureTestMacroTable.rst
+++ b/libcxx/docs/FeatureTestMacroTable.rst
@@ -170,6 +170,8 @@ Status
     -------------------------------------------------------------------
     ``__cpp_lib_array_constexpr``                     ``201811L``
     ------------------------------------------------- -----------------
+    ``__cpp_lib_assume_aligned``                      *unimplemented*
+    ------------------------------------------------- -----------------
     ``__cpp_lib_atomic_flag_test``                    ``201907L``
     ------------------------------------------------- -----------------
     ``__cpp_lib_atomic_float``                        *unimplemented*
@@ -184,48 +186,108 @@ Status
     ------------------------------------------------- -----------------
     ``__cpp_lib_atomic_wait``                         ``201907L``
     ------------------------------------------------- -----------------
+    ``__cpp_lib_barrier``                             ``201907L``
+    ------------------------------------------------- -----------------
     ``__cpp_lib_bind_front``                          *unimplemented*
     ------------------------------------------------- -----------------
     ``__cpp_lib_bit_cast``                            *unimplemented*
     ------------------------------------------------- -----------------
+    ``__cpp_lib_bitops``                              *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_bounded_array_traits``                ``201902L``
+    ------------------------------------------------- -----------------
     ``__cpp_lib_char8_t``                             ``201811L``
     ------------------------------------------------- -----------------
     ``__cpp_lib_concepts``                            *unimplemented*
     ------------------------------------------------- -----------------
+    ``__cpp_lib_constexpr_algorithms``                *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_constexpr_complex``                   *unimplemented*
+    ------------------------------------------------- -----------------
     ``__cpp_lib_constexpr_dynamic_alloc``             ``201907L``
     ------------------------------------------------- -----------------
-    ``__cpp_lib_constexpr_functional``                ``201907L``
+    ``__cpp_lib_constexpr_functional``                *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_constexpr_iterator``                  *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_constexpr_memory``                    *unimplemented*
     ------------------------------------------------- -----------------
     ``__cpp_lib_constexpr_numeric``                   ``201911L``
     ------------------------------------------------- -----------------
-    ``__cpp_lib_constexpr_swap_algorithms``           *unimplemented*
+    ``__cpp_lib_constexpr_string``                    *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_constexpr_string_view``               *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_constexpr_tuple``                     *unimplemented*
     ------------------------------------------------- -----------------
     ``__cpp_lib_constexpr_utility``                   ``201811L``
     ------------------------------------------------- -----------------
+    ``__cpp_lib_constexpr_vector``                    *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_coroutine``                           *unimplemented*
+    ------------------------------------------------- -----------------
     ``__cpp_lib_destroying_delete``                   ``201806L``
     ------------------------------------------------- -----------------
     ``__cpp_lib_endian``                              ``201907L``
     ------------------------------------------------- -----------------
     ``__cpp_lib_erase_if``                            ``202002L``
     ------------------------------------------------- -----------------
+    ``__cpp_lib_execution``                           *unimplemented*
+    ------------------------------------------------- -----------------
     ``__cpp_lib_generic_unordered_lookup``            ``201811L``
     ------------------------------------------------- -----------------
     ``__cpp_lib_int_pow2``                            ``202002L``
     ------------------------------------------------- -----------------
+    ``__cpp_lib_integer_comparison_functions``        *unimplemented*
+    ------------------------------------------------- -----------------
     ``__cpp_lib_interpolate``                         ``201902L``
     ------------------------------------------------- -----------------
     ``__cpp_lib_is_constant_evaluated``               ``201811L``
     ------------------------------------------------- -----------------
+    ``__cpp_lib_is_layout_compatible``                *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_is_nothrow_convertible``              ``201806L``
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_is_pointer_interconvertible``         *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_jthread``                             *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_latch``                               ``201907L``
+    ------------------------------------------------- -----------------
     ``__cpp_lib_list_remove_return_type``             ``201806L``
     ------------------------------------------------- -----------------
     ``__cpp_lib_math_constants``                      ``201907L``
     ------------------------------------------------- -----------------
+    ``__cpp_lib_polymorphic_allocator``               *unimplemented*
+    ------------------------------------------------- -----------------
     ``__cpp_lib_ranges``                              *unimplemented*
     ------------------------------------------------- -----------------
+    ``__cpp_lib_remove_cvref``                        ``201711L``
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_semaphore``                           ``201907L``
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_shift``                               *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_smart_ptr_for_overwrite``             *unimplemented*
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_source_location``                     *unimplemented*
+    ------------------------------------------------- -----------------
     ``__cpp_lib_span``                                ``202002L``
     ------------------------------------------------- -----------------
+    ``__cpp_lib_ssize``                               ``201902L``
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_starts_ends_with``                    ``201711L``
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_string_view``                         ``201803L``
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_syncbuf``                             *unimplemented*
+    ------------------------------------------------- -----------------
     ``__cpp_lib_three_way_comparison``                *unimplemented*
     ------------------------------------------------- -----------------
+    ``__cpp_lib_to_address``                          ``201711L``
+    ------------------------------------------------- -----------------
     ``__cpp_lib_to_array``                            ``201907L``
+    ------------------------------------------------- -----------------
+    ``__cpp_lib_unwrap_ref``                          ``201811L``
     ================================================= =================
 

diff  --git a/libcxx/include/version b/libcxx/include/version
index 39e307e93bc2..8c377fbae4fa 100644
--- a/libcxx/include/version
+++ b/libcxx/include/version
@@ -24,6 +24,7 @@ __cpp_lib_apply                                         201603L <tuple>
 __cpp_lib_array_constexpr                               201811L <array> <iterator>
                                                         201603L // C++17
 __cpp_lib_as_const                                      201510L <utility>
+__cpp_lib_assume_aligned                                201811L <memory>
 __cpp_lib_atomic_flag_test                              201907L <atomic>
 __cpp_lib_atomic_float                                  201711L <atomic>
 __cpp_lib_atomic_is_always_lock_free                    201603L <atomic>
@@ -32,9 +33,12 @@ __cpp_lib_atomic_ref                                    201806L <atomic>
 __cpp_lib_atomic_shared_ptr                             201711L <atomic>
 __cpp_lib_atomic_value_initialization                   201911L <atomic> <memory>
 __cpp_lib_atomic_wait                                   201907L <atomic>
-__cpp_lib_bind_front                                    201811L <functional>
+__cpp_lib_barrier                                       201907L <barrier>
+__cpp_lib_bind_front                                    201907L <functional>
 __cpp_lib_bit_cast                                      201806L <bit>
+__cpp_lib_bitops                                        201907L <bit>
 __cpp_lib_bool_constant                                 201505L <type_traits>
+__cpp_lib_bounded_array_traits                          201902L <type_traits>
 __cpp_lib_boyer_moore_searcher                          201603L <functional>
 __cpp_lib_byte                                          201603L <cstddef>
 __cpp_lib_char8_t                                       201811L <atomic> <filesystem> <istream>
@@ -44,12 +48,20 @@ __cpp_lib_chrono                                        201611L <chrono>
 __cpp_lib_chrono_udls                                   201304L <chrono>
 __cpp_lib_clamp                                         201603L <algorithm>
 __cpp_lib_complex_udls                                  201309L <complex>
-__cpp_lib_concepts                                      201806L <concepts>
+__cpp_lib_concepts                                      202002L <concepts>
+__cpp_lib_constexpr_algorithms                          201806L <algorithm>
+__cpp_lib_constexpr_complex                             201711L <complex>
 __cpp_lib_constexpr_dynamic_alloc                       201907L <memory>
 __cpp_lib_constexpr_functional                          201907L <functional>
+__cpp_lib_constexpr_iterator                            201811L <iterator>
+__cpp_lib_constexpr_memory                              201811L <memory>
 __cpp_lib_constexpr_numeric                             201911L <numeric>
-__cpp_lib_constexpr_swap_algorithms                     201806L <algorithm>
+__cpp_lib_constexpr_string                              201907L <string>
+__cpp_lib_constexpr_string_view                         201811L <string_view>
+__cpp_lib_constexpr_tuple                               201811L <tuple>
 __cpp_lib_constexpr_utility                             201811L <utility>
+__cpp_lib_constexpr_vector                              201907L <vector>
+__cpp_lib_coroutine                                     201902L <coroutine>
 __cpp_lib_destroying_delete                             201806L <new>
 __cpp_lib_enable_shared_from_this                       201603L <memory>
 __cpp_lib_endian                                        201907L <bit>
@@ -57,7 +69,8 @@ __cpp_lib_erase_if                                      202002L <deque> <forward
                                                                 <map> <set> <string>
                                                                 <unordered_map> <unordered_set> <vector>
 __cpp_lib_exchange_function                             201304L <utility>
-__cpp_lib_execution                                     201603L <execution>
+__cpp_lib_execution                                     201902L <execution>
+                                                        201603L // C++17
 __cpp_lib_filesystem                                    201703L <filesystem>
 __cpp_lib_gcd_lcm                                       201606L <numeric>
 __cpp_lib_generic_associative_lookup                    201304L <map> <set>
@@ -67,16 +80,22 @@ __cpp_lib_has_unique_object_representations             201606L <type_traits>
 __cpp_lib_hypot                                         201603L <cmath>
 __cpp_lib_incomplete_container_elements                 201505L <forward_list> <list> <vector>
 __cpp_lib_int_pow2                                      202002L <bit>
+__cpp_lib_integer_comparison_functions                  202002L <utility>
 __cpp_lib_integer_sequence                              201304L <utility>
 __cpp_lib_integral_constant_callable                    201304L <type_traits>
-__cpp_lib_interpolate                                   201902L <numeric>
+__cpp_lib_interpolate                                   201902L <cmath> <numeric>
 __cpp_lib_invoke                                        201411L <functional>
 __cpp_lib_is_aggregate                                  201703L <type_traits>
 __cpp_lib_is_constant_evaluated                         201811L <type_traits>
 __cpp_lib_is_final                                      201402L <type_traits>
 __cpp_lib_is_invocable                                  201703L <type_traits>
+__cpp_lib_is_layout_compatible                          201907L <type_traits>
+__cpp_lib_is_nothrow_convertible                        201806L <type_traits>
 __cpp_lib_is_null_pointer                               201309L <type_traits>
+__cpp_lib_is_pointer_interconvertible                   201907L <type_traits>
 __cpp_lib_is_swappable                                  201603L <type_traits>
+__cpp_lib_jthread                                       201911L <stop_token> <thread>
+__cpp_lib_latch                                         201907L <latch>
 __cpp_lib_launder                                       201606L <new>
 __cpp_lib_list_remove_return_type                       201806L <forward_list> <list>
 __cpp_lib_logical_traits                                201510L <type_traits>
@@ -97,32 +116,44 @@ __cpp_lib_not_fn                                        201603L <functional>
 __cpp_lib_null_iterators                                201304L <iterator>
 __cpp_lib_optional                                      201606L <optional>
 __cpp_lib_parallel_algorithm                            201603L <algorithm> <numeric>
+__cpp_lib_polymorphic_allocator                         201902L <memory>
 __cpp_lib_quoted_string_io                              201304L <iomanip>
 __cpp_lib_ranges                                        201811L <algorithm> <functional> <iterator>
                                                                 <memory> <ranges>
 __cpp_lib_raw_memory_algorithms                         201606L <memory>
+__cpp_lib_remove_cvref                                  201711L <type_traits>
 __cpp_lib_result_of_sfinae                              201210L <functional> <type_traits>
 __cpp_lib_robust_nonmodifying_seq_ops                   201304L <algorithm>
 __cpp_lib_sample                                        201603L <algorithm>
 __cpp_lib_scoped_lock                                   201703L <mutex>
+__cpp_lib_semaphore                                     201907L <semaphore>
 __cpp_lib_shared_mutex                                  201505L <shared_mutex>
 __cpp_lib_shared_ptr_arrays                             201611L <memory>
 __cpp_lib_shared_ptr_weak_type                          201606L <memory>
 __cpp_lib_shared_timed_mutex                            201402L <shared_mutex>
+__cpp_lib_shift                                         201806L <algorithm>
+__cpp_lib_smart_ptr_for_overwrite                       202002L <memory>
+__cpp_lib_source_location                               201907L <source_location>
 __cpp_lib_span                                          202002L <span>
+__cpp_lib_ssize                                         201902L <iterator>
+__cpp_lib_starts_ends_with                              201711L <string> <string_view>
 __cpp_lib_string_udls                                   201304L <string>
-__cpp_lib_string_view                                   201606L <string> <string_view>
-__cpp_lib_three_way_comparison                          201711L <compare>
+__cpp_lib_string_view                                   201803L <string> <string_view>
+                                                        201606L // C++17
+__cpp_lib_syncbuf                                       201803L <syncstream>
+__cpp_lib_three_way_comparison                          201907L <compare>
+__cpp_lib_to_address                                    201711L <memory>
 __cpp_lib_to_array                                      201907L <array>
 __cpp_lib_to_chars                                      201611L <utility>
 __cpp_lib_transformation_trait_aliases                  201304L <type_traits>
-__cpp_lib_transparent_operators                         201510L <functional>
+__cpp_lib_transparent_operators                         201510L <functional> <memory>
                                                         201210L // C++14
 __cpp_lib_tuple_element_t                               201402L <tuple>
 __cpp_lib_tuples_by_type                                201304L <tuple> <utility>
 __cpp_lib_type_trait_variable_templates                 201510L <type_traits>
 __cpp_lib_uncaught_exceptions                           201411L <exception>
 __cpp_lib_unordered_map_try_emplace                     201411L <unordered_map>
+__cpp_lib_unwrap_ref                                    201811L <functional>
 __cpp_lib_variant                                       201606L <variant>
 __cpp_lib_void_t                                        201411L <type_traits>
 
@@ -225,6 +256,7 @@ __cpp_lib_void_t                                        201411L <type_traits>
 #if _LIBCPP_STD_VER > 17
 # 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
@@ -246,36 +278,76 @@ __cpp_lib_void_t                                        201411L <type_traits>
 # if !defined(_LIBCPP_HAS_NO_THREADS)
 #   define __cpp_lib_atomic_wait                        201907L
 # endif
-// # define __cpp_lib_bind_front                           201811L
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+#   define __cpp_lib_barrier                            201907L
+# endif
+// # define __cpp_lib_bind_front                           201907L
 // # define __cpp_lib_bit_cast                             201806L
+// # define __cpp_lib_bitops                               201907L
+# define __cpp_lib_bounded_array_traits                 201902L
 # if !defined(_LIBCPP_NO_HAS_CHAR8_T)
 #   define __cpp_lib_char8_t                            201811L
 # endif
-// # define __cpp_lib_concepts                             201806L
+// # define __cpp_lib_concepts                             202002L
+// # define __cpp_lib_constexpr_algorithms                 201806L
+// # define __cpp_lib_constexpr_complex                    201711L
 # define __cpp_lib_constexpr_dynamic_alloc              201907L
-# define __cpp_lib_constexpr_functional                 201907L
+// # define __cpp_lib_constexpr_functional                 201907L
+// # define __cpp_lib_constexpr_iterator                   201811L
+// # define __cpp_lib_constexpr_memory                     201811L
 # define __cpp_lib_constexpr_numeric                    201911L
-// # define __cpp_lib_constexpr_swap_algorithms            201806L
+// # define __cpp_lib_constexpr_string                     201907L
+// # define __cpp_lib_constexpr_string_view                201811L
+// # define __cpp_lib_constexpr_tuple                      201811L
 # define __cpp_lib_constexpr_utility                    201811L
+// # define __cpp_lib_constexpr_vector                     201907L
+// # define __cpp_lib_coroutine                            201902L
 # if _LIBCPP_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L
 #   define __cpp_lib_destroying_delete                  201806L
 # endif
 # define __cpp_lib_endian                               201907L
 # define __cpp_lib_erase_if                             202002L
+# undef  __cpp_lib_execution
+// # define __cpp_lib_execution                            201902L
 # define __cpp_lib_generic_unordered_lookup             201811L
 # define __cpp_lib_int_pow2                             202002L
+// # define __cpp_lib_integer_comparison_functions         202002L
 # define __cpp_lib_interpolate                          201902L
 # if !defined(_LIBCPP_HAS_NO_BUILTIN_IS_CONSTANT_EVALUATED)
 #   define __cpp_lib_is_constant_evaluated              201811L
 # endif
+// # define __cpp_lib_is_layout_compatible                 201907L
+# define __cpp_lib_is_nothrow_convertible               201806L
+// # define __cpp_lib_is_pointer_interconvertible          201907L
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+// #   define __cpp_lib_jthread                            201911L
+# endif
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+#   define __cpp_lib_latch                              201907L
+# endif
 # define __cpp_lib_list_remove_return_type              201806L
 # if defined(__cpp_concepts) && __cpp_concepts >= 201811L
 #   define __cpp_lib_math_constants                     201907L
 # endif
+// # define __cpp_lib_polymorphic_allocator                201902L
 // # define __cpp_lib_ranges                               201811L
+# define __cpp_lib_remove_cvref                         201711L
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+#   define __cpp_lib_semaphore                          201907L
+# endif
+// # define __cpp_lib_shift                                201806L
+// # define __cpp_lib_smart_ptr_for_overwrite              202002L
+// # define __cpp_lib_source_location                      201907L
 # define __cpp_lib_span                                 202002L
-// # define __cpp_lib_three_way_comparison                 201711L
+# define __cpp_lib_ssize                                201902L
+# define __cpp_lib_starts_ends_with                     201711L
+# undef  __cpp_lib_string_view
+# define __cpp_lib_string_view                          201803L
+// # define __cpp_lib_syncbuf                              201803L
+// # define __cpp_lib_three_way_comparison                 201907L
+# define __cpp_lib_to_address                           201711L
 # define __cpp_lib_to_array                             201907L
+# define __cpp_lib_unwrap_ref                           201811L
 #endif
 
 #endif // _LIBCPP_VERSIONH

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp
index 820816dc2fd1..d32234134aec 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/algorithm.version.pass.cpp
@@ -15,11 +15,12 @@
 
 /*  Constant                                 Value
     __cpp_lib_clamp                          201603L [C++17]
-    __cpp_lib_constexpr_swap_algorithms      201806L [C++20]
+    __cpp_lib_constexpr_algorithms           201806L [C++20]
     __cpp_lib_parallel_algorithm             201603L [C++17]
     __cpp_lib_ranges                         201811L [C++20]
     __cpp_lib_robust_nonmodifying_seq_ops    201304L [C++14]
     __cpp_lib_sample                         201603L [C++17]
+    __cpp_lib_shift                          201806L [C++20]
 */
 
 #include <algorithm>
@@ -31,8 +32,8 @@
 #   error "__cpp_lib_clamp should not be defined before c++17"
 # endif
 
-# ifdef __cpp_lib_constexpr_swap_algorithms
-#   error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++20"
+# ifdef __cpp_lib_constexpr_algorithms
+#   error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
 # endif
 
 # ifdef __cpp_lib_parallel_algorithm
@@ -51,14 +52,18 @@
 #   error "__cpp_lib_sample should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_shift
+#   error "__cpp_lib_shift should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 14
 
 # ifdef __cpp_lib_clamp
 #   error "__cpp_lib_clamp should not be defined before c++17"
 # endif
 
-# ifdef __cpp_lib_constexpr_swap_algorithms
-#   error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++20"
+# ifdef __cpp_lib_constexpr_algorithms
+#   error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
 # endif
 
 # ifdef __cpp_lib_parallel_algorithm
@@ -80,6 +85,10 @@
 #   error "__cpp_lib_sample should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_shift
+#   error "__cpp_lib_shift should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 17
 
 # ifndef __cpp_lib_clamp
@@ -89,8 +98,8 @@
 #   error "__cpp_lib_clamp should have the value 201603L in c++17"
 # endif
 
-# ifdef __cpp_lib_constexpr_swap_algorithms
-#   error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++20"
+# ifdef __cpp_lib_constexpr_algorithms
+#   error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
 # endif
 
 # if !defined(_LIBCPP_VERSION)
@@ -124,6 +133,10 @@
 #   error "__cpp_lib_sample should have the value 201603L in c++17"
 # endif
 
+# ifdef __cpp_lib_shift
+#   error "__cpp_lib_shift should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 20
 
 # ifndef __cpp_lib_clamp
@@ -134,15 +147,15 @@
 # endif
 
 # if !defined(_LIBCPP_VERSION)
-#   ifndef __cpp_lib_constexpr_swap_algorithms
-#     error "__cpp_lib_constexpr_swap_algorithms should be defined in c++20"
+#   ifndef __cpp_lib_constexpr_algorithms
+#     error "__cpp_lib_constexpr_algorithms should be defined in c++20"
 #   endif
-#   if __cpp_lib_constexpr_swap_algorithms != 201806L
-#     error "__cpp_lib_constexpr_swap_algorithms should have the value 201806L in c++20"
+#   if __cpp_lib_constexpr_algorithms != 201806L
+#     error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
-#   ifdef __cpp_lib_constexpr_swap_algorithms
-#     error "__cpp_lib_constexpr_swap_algorithms should not be defined because it is unimplemented in libc++!"
+#   ifdef __cpp_lib_constexpr_algorithms
+#     error "__cpp_lib_constexpr_algorithms should not be defined because it is unimplemented in libc++!"
 #   endif
 # endif
 
@@ -186,6 +199,19 @@
 #   error "__cpp_lib_sample should have the value 201603L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_shift
+#     error "__cpp_lib_shift should be defined in c++20"
+#   endif
+#   if __cpp_lib_shift != 201806L
+#     error "__cpp_lib_shift should have the value 201806L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_shift
+#     error "__cpp_lib_shift should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 #endif // TEST_STD_VER == 20
 
 int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.pass.cpp
new file mode 100644
index 000000000000..d58651d9b720
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/barrier.version.pass.cpp
@@ -0,0 +1,60 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// WARNING: This test was generated by generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: libcpp-has-no-threads
+
+// <barrier>
+
+// Test the feature test macros defined by <barrier>
+
+/*  Constant             Value
+    __cpp_lib_barrier    201907L [C++20]
+*/
+
+#include <barrier>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+# ifdef __cpp_lib_barrier
+#   error "__cpp_lib_barrier should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 14
+
+# ifdef __cpp_lib_barrier
+#   error "__cpp_lib_barrier should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 17
+
+# ifdef __cpp_lib_barrier
+#   error "__cpp_lib_barrier should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 20
+
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+#   ifndef __cpp_lib_barrier
+#     error "__cpp_lib_barrier should be defined in c++20"
+#   endif
+#   if __cpp_lib_barrier != 201907L
+#     error "__cpp_lib_barrier should have the value 201907L in c++20"
+#   endif
+# else
+#   ifdef __cpp_lib_barrier
+#     error "__cpp_lib_barrier should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
+#   endif
+# endif
+
+#endif // TEST_STD_VER == 20
+
+int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp
index be015e444eb5..222a21a648a5 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/bit.version.pass.cpp
@@ -15,6 +15,7 @@
 
 /*  Constant              Value
     __cpp_lib_bit_cast    201806L [C++20]
+    __cpp_lib_bitops      201907L [C++20]
     __cpp_lib_endian      201907L [C++20]
     __cpp_lib_int_pow2    202002L [C++20]
 */
@@ -28,6 +29,10 @@
 #   error "__cpp_lib_bit_cast should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_bitops
+#   error "__cpp_lib_bitops should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_endian
 #   error "__cpp_lib_endian should not be defined before c++20"
 # endif
@@ -42,6 +47,10 @@
 #   error "__cpp_lib_bit_cast should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_bitops
+#   error "__cpp_lib_bitops should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_endian
 #   error "__cpp_lib_endian should not be defined before c++20"
 # endif
@@ -56,6 +65,10 @@
 #   error "__cpp_lib_bit_cast should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_bitops
+#   error "__cpp_lib_bitops should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_endian
 #   error "__cpp_lib_endian should not be defined before c++20"
 # endif
@@ -79,6 +92,19 @@
 #   endif
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_bitops
+#     error "__cpp_lib_bitops should be defined in c++20"
+#   endif
+#   if __cpp_lib_bitops != 201907L
+#     error "__cpp_lib_bitops should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_bitops
+#     error "__cpp_lib_bitops should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_endian
 #   error "__cpp_lib_endian should be defined in c++20"
 # endif

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp
index 974c4cd76d2e..20ae2daea44b 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/cmath.version.pass.cpp
@@ -15,6 +15,7 @@
 
 /*  Constant                            Value
     __cpp_lib_hypot                     201603L [C++17]
+    __cpp_lib_interpolate               201902L [C++20]
     __cpp_lib_math_special_functions    201603L [C++17]
 */
 
@@ -27,6 +28,10 @@
 #   error "__cpp_lib_hypot should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_interpolate
+#   error "__cpp_lib_interpolate should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_math_special_functions
 #   error "__cpp_lib_math_special_functions should not be defined before c++17"
 # endif
@@ -37,6 +42,10 @@
 #   error "__cpp_lib_hypot should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_interpolate
+#   error "__cpp_lib_interpolate should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_math_special_functions
 #   error "__cpp_lib_math_special_functions should not be defined before c++17"
 # endif
@@ -50,6 +59,10 @@
 #   error "__cpp_lib_hypot should have the value 201603L in c++17"
 # endif
 
+# ifdef __cpp_lib_interpolate
+#   error "__cpp_lib_interpolate should not be defined before c++20"
+# endif
+
 # if !defined(_LIBCPP_VERSION)
 #   ifndef __cpp_lib_math_special_functions
 #     error "__cpp_lib_math_special_functions should be defined in c++17"
@@ -72,6 +85,13 @@
 #   error "__cpp_lib_hypot should have the value 201603L in c++20"
 # endif
 
+# ifndef __cpp_lib_interpolate
+#   error "__cpp_lib_interpolate should be defined in c++20"
+# endif
+# if __cpp_lib_interpolate != 201902L
+#   error "__cpp_lib_interpolate should have the value 201902L in c++20"
+# endif
+
 # if !defined(_LIBCPP_VERSION)
 #   ifndef __cpp_lib_math_special_functions
 #     error "__cpp_lib_math_special_functions should be defined in c++20"

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/compare.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/compare.version.pass.cpp
index bcf419dbb903..091cbdadf2f8 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/compare.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/compare.version.pass.cpp
@@ -14,7 +14,7 @@
 // Test the feature test macros defined by <compare>
 
 /*  Constant                          Value
-    __cpp_lib_three_way_comparison    201711L [C++20]
+    __cpp_lib_three_way_comparison    201907L [C++20]
 */
 
 #include <compare>
@@ -44,8 +44,8 @@
 #   ifndef __cpp_lib_three_way_comparison
 #     error "__cpp_lib_three_way_comparison should be defined in c++20"
 #   endif
-#   if __cpp_lib_three_way_comparison != 201711L
-#     error "__cpp_lib_three_way_comparison should have the value 201711L in c++20"
+#   if __cpp_lib_three_way_comparison != 201907L
+#     error "__cpp_lib_three_way_comparison should have the value 201907L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
 #   ifdef __cpp_lib_three_way_comparison

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp
index 9c39619ff68e..1260821ea1c9 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/complex.version.pass.cpp
@@ -13,8 +13,9 @@
 
 // Test the feature test macros defined by <complex>
 
-/*  Constant                  Value
-    __cpp_lib_complex_udls    201309L [C++14]
+/*  Constant                       Value
+    __cpp_lib_complex_udls         201309L [C++14]
+    __cpp_lib_constexpr_complex    201711L [C++20]
 */
 
 #include <complex>
@@ -26,6 +27,10 @@
 #   error "__cpp_lib_complex_udls should not be defined before c++14"
 # endif
 
+# ifdef __cpp_lib_constexpr_complex
+#   error "__cpp_lib_constexpr_complex should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 14
 
 # ifndef __cpp_lib_complex_udls
@@ -35,6 +40,10 @@
 #   error "__cpp_lib_complex_udls should have the value 201309L in c++14"
 # endif
 
+# ifdef __cpp_lib_constexpr_complex
+#   error "__cpp_lib_constexpr_complex should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 17
 
 # ifndef __cpp_lib_complex_udls
@@ -44,6 +53,10 @@
 #   error "__cpp_lib_complex_udls should have the value 201309L in c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_complex
+#   error "__cpp_lib_constexpr_complex should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 20
 
 # ifndef __cpp_lib_complex_udls
@@ -53,6 +66,19 @@
 #   error "__cpp_lib_complex_udls should have the value 201309L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_complex
+#     error "__cpp_lib_constexpr_complex should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_complex != 201711L
+#     error "__cpp_lib_constexpr_complex should have the value 201711L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_complex
+#     error "__cpp_lib_constexpr_complex should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 #endif // TEST_STD_VER == 20
 
 int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp
index a35da2dbb993..f7f9343dac9d 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/concepts.version.pass.cpp
@@ -14,7 +14,7 @@
 // Test the feature test macros defined by <concepts>
 
 /*  Constant              Value
-    __cpp_lib_concepts    201806L [C++20]
+    __cpp_lib_concepts    202002L [C++20]
 */
 
 #include <concepts>
@@ -44,8 +44,8 @@
 #   ifndef __cpp_lib_concepts
 #     error "__cpp_lib_concepts should be defined in c++20"
 #   endif
-#   if __cpp_lib_concepts != 201806L
-#     error "__cpp_lib_concepts should have the value 201806L in c++20"
+#   if __cpp_lib_concepts != 202002L
+#     error "__cpp_lib_concepts should have the value 202002L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
 #   ifdef __cpp_lib_concepts

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp
index 40e47ce9fc24..9ecdc038adfe 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/execution.version.pass.cpp
@@ -15,6 +15,7 @@
 
 /*  Constant               Value
     __cpp_lib_execution    201603L [C++17]
+                           201902L [C++20]
 */
 
 #include <execution>
@@ -53,8 +54,8 @@
 #   ifndef __cpp_lib_execution
 #     error "__cpp_lib_execution should be defined in c++20"
 #   endif
-#   if __cpp_lib_execution != 201603L
-#     error "__cpp_lib_execution should have the value 201603L in c++20"
+#   if __cpp_lib_execution != 201902L
+#     error "__cpp_lib_execution should have the value 201902L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
 #   ifdef __cpp_lib_execution

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp
index 6fa7b8580110..2f2128373164 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/functional.version.pass.cpp
@@ -14,7 +14,7 @@
 // Test the feature test macros defined by <functional>
 
 /*  Constant                           Value
-    __cpp_lib_bind_front               201811L [C++20]
+    __cpp_lib_bind_front               201907L [C++20]
     __cpp_lib_boyer_moore_searcher     201603L [C++17]
     __cpp_lib_constexpr_functional     201907L [C++20]
     __cpp_lib_invoke                   201411L [C++17]
@@ -23,6 +23,7 @@
     __cpp_lib_result_of_sfinae         201210L [C++14]
     __cpp_lib_transparent_operators    201210L [C++14]
                                        201510L [C++17]
+    __cpp_lib_unwrap_ref               201811L [C++20]
 */
 
 #include <functional>
@@ -62,6 +63,10 @@
 #   error "__cpp_lib_transparent_operators should not be defined before c++14"
 # endif
 
+# ifdef __cpp_lib_unwrap_ref
+#   error "__cpp_lib_unwrap_ref should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 14
 
 # ifdef __cpp_lib_bind_front
@@ -102,6 +107,10 @@
 #   error "__cpp_lib_transparent_operators should have the value 201210L in c++14"
 # endif
 
+# ifdef __cpp_lib_unwrap_ref
+#   error "__cpp_lib_unwrap_ref should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 17
 
 # ifdef __cpp_lib_bind_front
@@ -157,14 +166,18 @@
 #   error "__cpp_lib_transparent_operators should have the value 201510L in c++17"
 # endif
 
+# ifdef __cpp_lib_unwrap_ref
+#   error "__cpp_lib_unwrap_ref should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 20
 
 # if !defined(_LIBCPP_VERSION)
 #   ifndef __cpp_lib_bind_front
 #     error "__cpp_lib_bind_front should be defined in c++20"
 #   endif
-#   if __cpp_lib_bind_front != 201811L
-#     error "__cpp_lib_bind_front should have the value 201811L in c++20"
+#   if __cpp_lib_bind_front != 201907L
+#     error "__cpp_lib_bind_front should have the value 201907L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
 #   ifdef __cpp_lib_bind_front
@@ -185,11 +198,17 @@
 #   endif
 # endif
 
-# ifndef __cpp_lib_constexpr_functional
-#   error "__cpp_lib_constexpr_functional should be defined in c++20"
-# endif
-# if __cpp_lib_constexpr_functional != 201907L
-#   error "__cpp_lib_constexpr_functional should have the value 201907L in c++20"
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_functional
+#     error "__cpp_lib_constexpr_functional should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_functional != 201907L
+#     error "__cpp_lib_constexpr_functional should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_functional
+#     error "__cpp_lib_constexpr_functional should not be defined because it is unimplemented in libc++!"
+#   endif
 # endif
 
 # ifndef __cpp_lib_invoke
@@ -233,6 +252,13 @@
 #   error "__cpp_lib_transparent_operators should have the value 201510L in c++20"
 # endif
 
+# ifndef __cpp_lib_unwrap_ref
+#   error "__cpp_lib_unwrap_ref should be defined in c++20"
+# endif
+# if __cpp_lib_unwrap_ref != 201811L
+#   error "__cpp_lib_unwrap_ref should have the value 201811L in c++20"
+# endif
+
 #endif // TEST_STD_VER == 20
 
 int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp
index c6e5851d0755..b65a96d0c31b 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/iterator.version.pass.cpp
@@ -16,10 +16,12 @@
 /*  Constant                                Value
     __cpp_lib_array_constexpr               201603L [C++17]
                                             201811L [C++20]
+    __cpp_lib_constexpr_iterator            201811L [C++20]
     __cpp_lib_make_reverse_iterator         201402L [C++14]
     __cpp_lib_nonmember_container_access    201411L [C++17]
     __cpp_lib_null_iterators                201304L [C++14]
     __cpp_lib_ranges                        201811L [C++20]
+    __cpp_lib_ssize                         201902L [C++20]
 */
 
 #include <iterator>
@@ -31,6 +33,10 @@
 #   error "__cpp_lib_array_constexpr should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_iterator
+#   error "__cpp_lib_constexpr_iterator should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_make_reverse_iterator
 #   error "__cpp_lib_make_reverse_iterator should not be defined before c++14"
 # endif
@@ -47,12 +53,20 @@
 #   error "__cpp_lib_ranges should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_ssize
+#   error "__cpp_lib_ssize should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 14
 
 # ifdef __cpp_lib_array_constexpr
 #   error "__cpp_lib_array_constexpr should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_iterator
+#   error "__cpp_lib_constexpr_iterator should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_make_reverse_iterator
 #   error "__cpp_lib_make_reverse_iterator should be defined in c++14"
 # endif
@@ -75,6 +89,10 @@
 #   error "__cpp_lib_ranges should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_ssize
+#   error "__cpp_lib_ssize should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 17
 
 # ifndef __cpp_lib_array_constexpr
@@ -84,6 +102,10 @@
 #   error "__cpp_lib_array_constexpr should have the value 201603L in c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_iterator
+#   error "__cpp_lib_constexpr_iterator should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_make_reverse_iterator
 #   error "__cpp_lib_make_reverse_iterator should be defined in c++17"
 # endif
@@ -109,6 +131,10 @@
 #   error "__cpp_lib_ranges should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_ssize
+#   error "__cpp_lib_ssize should not be defined before c++20"
+# endif
+
 #elif TEST_STD_VER == 20
 
 # ifndef __cpp_lib_array_constexpr
@@ -118,6 +144,19 @@
 #   error "__cpp_lib_array_constexpr should have the value 201811L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_iterator
+#     error "__cpp_lib_constexpr_iterator should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_iterator != 201811L
+#     error "__cpp_lib_constexpr_iterator should have the value 201811L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_iterator
+#     error "__cpp_lib_constexpr_iterator should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_make_reverse_iterator
 #   error "__cpp_lib_make_reverse_iterator should be defined in c++20"
 # endif
@@ -152,6 +191,13 @@
 #   endif
 # endif
 
+# ifndef __cpp_lib_ssize
+#   error "__cpp_lib_ssize should be defined in c++20"
+# endif
+# if __cpp_lib_ssize != 201902L
+#   error "__cpp_lib_ssize should have the value 201902L in c++20"
+# endif
+
 #endif // TEST_STD_VER == 20
 
 int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/latch.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/latch.version.pass.cpp
new file mode 100644
index 000000000000..47b6b8edca23
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/latch.version.pass.cpp
@@ -0,0 +1,60 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// WARNING: This test was generated by generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: libcpp-has-no-threads
+
+// <latch>
+
+// Test the feature test macros defined by <latch>
+
+/*  Constant           Value
+    __cpp_lib_latch    201907L [C++20]
+*/
+
+#include <latch>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+# ifdef __cpp_lib_latch
+#   error "__cpp_lib_latch should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 14
+
+# ifdef __cpp_lib_latch
+#   error "__cpp_lib_latch should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 17
+
+# ifdef __cpp_lib_latch
+#   error "__cpp_lib_latch should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 20
+
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+#   ifndef __cpp_lib_latch
+#     error "__cpp_lib_latch should be defined in c++20"
+#   endif
+#   if __cpp_lib_latch != 201907L
+#     error "__cpp_lib_latch should have the value 201907L in c++20"
+#   endif
+# else
+#   ifdef __cpp_lib_latch
+#     error "__cpp_lib_latch should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
+#   endif
+# endif
+
+#endif // TEST_STD_VER == 20
+
+int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp
index 3fe3990bb75f..a9b856fcf83b 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.pass.cpp
@@ -16,14 +16,21 @@
 /*  Constant                                      Value
     __cpp_lib_addressof_constexpr                 201603L [C++17]
     __cpp_lib_allocator_traits_is_always_equal    201411L [C++17]
+    __cpp_lib_assume_aligned                      201811L [C++20]
     __cpp_lib_atomic_value_initialization         201911L [C++20]
     __cpp_lib_constexpr_dynamic_alloc             201907L [C++20]
+    __cpp_lib_constexpr_memory                    201811L [C++20]
     __cpp_lib_enable_shared_from_this             201603L [C++17]
     __cpp_lib_make_unique                         201304L [C++14]
+    __cpp_lib_polymorphic_allocator               201902L [C++20]
     __cpp_lib_ranges                              201811L [C++20]
     __cpp_lib_raw_memory_algorithms               201606L [C++17]
     __cpp_lib_shared_ptr_arrays                   201611L [C++17]
     __cpp_lib_shared_ptr_weak_type                201606L [C++17]
+    __cpp_lib_smart_ptr_for_overwrite             202002L [C++20]
+    __cpp_lib_to_address                          201711L [C++20]
+    __cpp_lib_transparent_operators               201210L [C++14]
+                                                  201510L [C++17]
 */
 
 #include <memory>
@@ -39,6 +46,10 @@
 #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_assume_aligned
+#   error "__cpp_lib_assume_aligned should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_atomic_value_initialization
 #   error "__cpp_lib_atomic_value_initialization should not be defined before c++20"
 # endif
@@ -47,6 +58,10 @@
 #   error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_memory
+#   error "__cpp_lib_constexpr_memory should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_enable_shared_from_this
 #   error "__cpp_lib_enable_shared_from_this should not be defined before c++17"
 # endif
@@ -55,6 +70,10 @@
 #   error "__cpp_lib_make_unique should not be defined before c++14"
 # endif
 
+# ifdef __cpp_lib_polymorphic_allocator
+#   error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_ranges
 #   error "__cpp_lib_ranges should not be defined before c++20"
 # endif
@@ -71,6 +90,18 @@
 #   error "__cpp_lib_shared_ptr_weak_type should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_smart_ptr_for_overwrite
+#   error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_to_address
+#   error "__cpp_lib_to_address should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_transparent_operators
+#   error "__cpp_lib_transparent_operators should not be defined before c++14"
+# endif
+
 #elif TEST_STD_VER == 14
 
 # ifdef __cpp_lib_addressof_constexpr
@@ -81,6 +112,10 @@
 #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_assume_aligned
+#   error "__cpp_lib_assume_aligned should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_atomic_value_initialization
 #   error "__cpp_lib_atomic_value_initialization should not be defined before c++20"
 # endif
@@ -89,6 +124,10 @@
 #   error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_memory
+#   error "__cpp_lib_constexpr_memory should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_enable_shared_from_this
 #   error "__cpp_lib_enable_shared_from_this should not be defined before c++17"
 # endif
@@ -100,6 +139,10 @@
 #   error "__cpp_lib_make_unique should have the value 201304L in c++14"
 # endif
 
+# ifdef __cpp_lib_polymorphic_allocator
+#   error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_ranges
 #   error "__cpp_lib_ranges should not be defined before c++20"
 # endif
@@ -116,6 +159,21 @@
 #   error "__cpp_lib_shared_ptr_weak_type should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_smart_ptr_for_overwrite
+#   error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_to_address
+#   error "__cpp_lib_to_address should not be defined before c++20"
+# endif
+
+# ifndef __cpp_lib_transparent_operators
+#   error "__cpp_lib_transparent_operators should be defined in c++14"
+# endif
+# if __cpp_lib_transparent_operators != 201210L
+#   error "__cpp_lib_transparent_operators should have the value 201210L in c++14"
+# endif
+
 #elif TEST_STD_VER == 17
 
 # if TEST_HAS_BUILTIN(__builtin_addressof) || TEST_GCC_VER >= 700
@@ -138,6 +196,10 @@
 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
 # endif
 
+# ifdef __cpp_lib_assume_aligned
+#   error "__cpp_lib_assume_aligned should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_atomic_value_initialization
 #   error "__cpp_lib_atomic_value_initialization should not be defined before c++20"
 # endif
@@ -146,6 +208,10 @@
 #   error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_memory
+#   error "__cpp_lib_constexpr_memory should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_enable_shared_from_this
 #   error "__cpp_lib_enable_shared_from_this should be defined in c++17"
 # endif
@@ -160,6 +226,10 @@
 #   error "__cpp_lib_make_unique should have the value 201304L in c++17"
 # endif
 
+# ifdef __cpp_lib_polymorphic_allocator
+#   error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_ranges
 #   error "__cpp_lib_ranges should not be defined before c++20"
 # endif
@@ -185,6 +255,21 @@
 #   error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++17"
 # endif
 
+# ifdef __cpp_lib_smart_ptr_for_overwrite
+#   error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_to_address
+#   error "__cpp_lib_to_address should not be defined before c++20"
+# endif
+
+# ifndef __cpp_lib_transparent_operators
+#   error "__cpp_lib_transparent_operators should be defined in c++17"
+# endif
+# if __cpp_lib_transparent_operators != 201510L
+#   error "__cpp_lib_transparent_operators should have the value 201510L in c++17"
+# endif
+
 #elif TEST_STD_VER == 20
 
 # if TEST_HAS_BUILTIN(__builtin_addressof) || TEST_GCC_VER >= 700
@@ -207,6 +292,19 @@
 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_assume_aligned
+#     error "__cpp_lib_assume_aligned should be defined in c++20"
+#   endif
+#   if __cpp_lib_assume_aligned != 201811L
+#     error "__cpp_lib_assume_aligned should have the value 201811L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_assume_aligned
+#     error "__cpp_lib_assume_aligned should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # if !defined(_LIBCPP_VERSION)
 #   ifndef __cpp_lib_atomic_value_initialization
 #     error "__cpp_lib_atomic_value_initialization should be defined in c++20"
@@ -227,6 +325,19 @@
 #   error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_memory
+#     error "__cpp_lib_constexpr_memory should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_memory != 201811L
+#     error "__cpp_lib_constexpr_memory should have the value 201811L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_memory
+#     error "__cpp_lib_constexpr_memory should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_enable_shared_from_this
 #   error "__cpp_lib_enable_shared_from_this should be defined in c++20"
 # endif
@@ -241,6 +352,19 @@
 #   error "__cpp_lib_make_unique should have the value 201304L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_polymorphic_allocator
+#     error "__cpp_lib_polymorphic_allocator should be defined in c++20"
+#   endif
+#   if __cpp_lib_polymorphic_allocator != 201902L
+#     error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_polymorphic_allocator
+#     error "__cpp_lib_polymorphic_allocator should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # if !defined(_LIBCPP_VERSION)
 #   ifndef __cpp_lib_ranges
 #     error "__cpp_lib_ranges should be defined in c++20"
@@ -275,6 +399,33 @@
 #   error "__cpp_lib_shared_ptr_weak_type should have the value 201606L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_smart_ptr_for_overwrite
+#     error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++20"
+#   endif
+#   if __cpp_lib_smart_ptr_for_overwrite != 202002L
+#     error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_smart_ptr_for_overwrite
+#     error "__cpp_lib_smart_ptr_for_overwrite should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# ifndef __cpp_lib_to_address
+#   error "__cpp_lib_to_address should be defined in c++20"
+# endif
+# if __cpp_lib_to_address != 201711L
+#   error "__cpp_lib_to_address should have the value 201711L in c++20"
+# endif
+
+# ifndef __cpp_lib_transparent_operators
+#   error "__cpp_lib_transparent_operators should be defined in c++20"
+# endif
+# if __cpp_lib_transparent_operators != 201510L
+#   error "__cpp_lib_transparent_operators should have the value 201510L in c++20"
+# endif
+
 #endif // TEST_STD_VER == 20
 
 int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/semaphore.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/semaphore.version.pass.cpp
new file mode 100644
index 000000000000..3327dd7e7b0e
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/semaphore.version.pass.cpp
@@ -0,0 +1,60 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// WARNING: This test was generated by generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: libcpp-has-no-threads
+
+// <semaphore>
+
+// Test the feature test macros defined by <semaphore>
+
+/*  Constant               Value
+    __cpp_lib_semaphore    201907L [C++20]
+*/
+
+#include <semaphore>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+# ifdef __cpp_lib_semaphore
+#   error "__cpp_lib_semaphore should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 14
+
+# ifdef __cpp_lib_semaphore
+#   error "__cpp_lib_semaphore should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 17
+
+# ifdef __cpp_lib_semaphore
+#   error "__cpp_lib_semaphore should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 20
+
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+#   ifndef __cpp_lib_semaphore
+#     error "__cpp_lib_semaphore should be defined in c++20"
+#   endif
+#   if __cpp_lib_semaphore != 201907L
+#     error "__cpp_lib_semaphore should have the value 201907L in c++20"
+#   endif
+# else
+#   ifdef __cpp_lib_semaphore
+#     error "__cpp_lib_semaphore should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
+#   endif
+# endif
+
+#endif // TEST_STD_VER == 20
+
+int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp
index aa9aa3285d4b..98b3c745343a 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/string.version.pass.cpp
@@ -16,10 +16,13 @@
 /*  Constant                                      Value
     __cpp_lib_allocator_traits_is_always_equal    201411L [C++17]
     __cpp_lib_char8_t                             201811L [C++20]
+    __cpp_lib_constexpr_string                    201907L [C++20]
     __cpp_lib_erase_if                            202002L [C++20]
     __cpp_lib_nonmember_container_access          201411L [C++17]
+    __cpp_lib_starts_ends_with                    201711L [C++20]
     __cpp_lib_string_udls                         201304L [C++14]
     __cpp_lib_string_view                         201606L [C++17]
+                                                  201803L [C++20]
 */
 
 #include <string>
@@ -35,6 +38,10 @@
 #   error "__cpp_lib_char8_t should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_string
+#   error "__cpp_lib_constexpr_string should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_erase_if
 #   error "__cpp_lib_erase_if should not be defined before c++20"
 # endif
@@ -43,6 +50,10 @@
 #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_string_udls
 #   error "__cpp_lib_string_udls should not be defined before c++14"
 # endif
@@ -61,6 +72,10 @@
 #   error "__cpp_lib_char8_t should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_string
+#   error "__cpp_lib_constexpr_string should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_erase_if
 #   error "__cpp_lib_erase_if should not be defined before c++20"
 # endif
@@ -69,6 +84,10 @@
 #   error "__cpp_lib_nonmember_container_access should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_string_udls
 #   error "__cpp_lib_string_udls should be defined in c++14"
 # endif
@@ -93,6 +112,10 @@
 #   error "__cpp_lib_char8_t should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_string
+#   error "__cpp_lib_constexpr_string should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_erase_if
 #   error "__cpp_lib_erase_if should not be defined before c++20"
 # endif
@@ -104,6 +127,10 @@
 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++17"
 # endif
 
+# ifdef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_string_udls
 #   error "__cpp_lib_string_udls should be defined in c++17"
 # endif
@@ -140,6 +167,19 @@
 #   endif
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_string
+#     error "__cpp_lib_constexpr_string should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_string != 201907L
+#     error "__cpp_lib_constexpr_string should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_string
+#     error "__cpp_lib_constexpr_string should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_erase_if
 #   error "__cpp_lib_erase_if should be defined in c++20"
 # endif
@@ -154,6 +194,13 @@
 #   error "__cpp_lib_nonmember_container_access should have the value 201411L in c++20"
 # endif
 
+# ifndef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should be defined in c++20"
+# endif
+# if __cpp_lib_starts_ends_with != 201711L
+#   error "__cpp_lib_starts_ends_with should have the value 201711L in c++20"
+# endif
+
 # ifndef __cpp_lib_string_udls
 #   error "__cpp_lib_string_udls should be defined in c++20"
 # endif
@@ -164,8 +211,8 @@
 # ifndef __cpp_lib_string_view
 #   error "__cpp_lib_string_view should be defined in c++20"
 # endif
-# if __cpp_lib_string_view != 201606L
-#   error "__cpp_lib_string_view should have the value 201606L in c++20"
+# if __cpp_lib_string_view != 201803L
+#   error "__cpp_lib_string_view should have the value 201803L in c++20"
 # endif
 
 #endif // TEST_STD_VER == 20

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp
index d489b63932e0..430fcc23b119 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/string_view.version.pass.cpp
@@ -13,9 +13,12 @@
 
 // Test the feature test macros defined by <string_view>
 
-/*  Constant                 Value
-    __cpp_lib_char8_t        201811L [C++20]
-    __cpp_lib_string_view    201606L [C++17]
+/*  Constant                           Value
+    __cpp_lib_char8_t                  201811L [C++20]
+    __cpp_lib_constexpr_string_view    201811L [C++20]
+    __cpp_lib_starts_ends_with         201711L [C++20]
+    __cpp_lib_string_view              201606L [C++17]
+                                       201803L [C++20]
 */
 
 #include <string_view>
@@ -27,6 +30,14 @@
 #   error "__cpp_lib_char8_t should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_string_view
+#   error "__cpp_lib_constexpr_string_view should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_string_view
 #   error "__cpp_lib_string_view should not be defined before c++17"
 # endif
@@ -37,6 +48,14 @@
 #   error "__cpp_lib_char8_t should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_string_view
+#   error "__cpp_lib_constexpr_string_view should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_string_view
 #   error "__cpp_lib_string_view should not be defined before c++17"
 # endif
@@ -47,6 +66,14 @@
 #   error "__cpp_lib_char8_t should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_string_view
+#   error "__cpp_lib_constexpr_string_view should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_string_view
 #   error "__cpp_lib_string_view should be defined in c++17"
 # endif
@@ -69,11 +96,31 @@
 #   endif
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_string_view
+#     error "__cpp_lib_constexpr_string_view should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_string_view != 201811L
+#     error "__cpp_lib_constexpr_string_view should have the value 201811L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_string_view
+#     error "__cpp_lib_constexpr_string_view should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# ifndef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should be defined in c++20"
+# endif
+# if __cpp_lib_starts_ends_with != 201711L
+#   error "__cpp_lib_starts_ends_with should have the value 201711L in c++20"
+# endif
+
 # ifndef __cpp_lib_string_view
 #   error "__cpp_lib_string_view should be defined in c++20"
 # endif
-# if __cpp_lib_string_view != 201606L
-#   error "__cpp_lib_string_view should have the value 201606L in c++20"
+# if __cpp_lib_string_view != 201803L
+#   error "__cpp_lib_string_view should have the value 201803L in c++20"
 # endif
 
 #endif // TEST_STD_VER == 20

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.pass.cpp
new file mode 100644
index 000000000000..bcce2cf59016
--- /dev/null
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/thread.version.pass.cpp
@@ -0,0 +1,60 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// WARNING: This test was generated by generate_feature_test_macro_components.py
+// and should not be edited manually.
+
+// UNSUPPORTED: libcpp-has-no-threads
+
+// <thread>
+
+// Test the feature test macros defined by <thread>
+
+/*  Constant             Value
+    __cpp_lib_jthread    201911L [C++20]
+*/
+
+#include <thread>
+#include "test_macros.h"
+
+#if TEST_STD_VER < 14
+
+# ifdef __cpp_lib_jthread
+#   error "__cpp_lib_jthread should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 14
+
+# ifdef __cpp_lib_jthread
+#   error "__cpp_lib_jthread should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 17
+
+# ifdef __cpp_lib_jthread
+#   error "__cpp_lib_jthread should not be defined before c++20"
+# endif
+
+#elif TEST_STD_VER == 20
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_jthread
+#     error "__cpp_lib_jthread should be defined in c++20"
+#   endif
+#   if __cpp_lib_jthread != 201911L
+#     error "__cpp_lib_jthread should have the value 201911L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_jthread
+#     error "__cpp_lib_jthread should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+#endif // TEST_STD_VER == 20
+
+int main(int, char**) { return 0; }

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp
index 556ed84027fa..7d87d8207756 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/tuple.version.pass.cpp
@@ -15,6 +15,7 @@
 
 /*  Constant                     Value
     __cpp_lib_apply              201603L [C++17]
+    __cpp_lib_constexpr_tuple    201811L [C++20]
     __cpp_lib_make_from_tuple    201606L [C++17]
     __cpp_lib_tuple_element_t    201402L [C++14]
     __cpp_lib_tuples_by_type     201304L [C++14]
@@ -29,6 +30,10 @@
 #   error "__cpp_lib_apply should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_tuple
+#   error "__cpp_lib_constexpr_tuple should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_make_from_tuple
 #   error "__cpp_lib_make_from_tuple should not be defined before c++17"
 # endif
@@ -47,6 +52,10 @@
 #   error "__cpp_lib_apply should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_tuple
+#   error "__cpp_lib_constexpr_tuple should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_make_from_tuple
 #   error "__cpp_lib_make_from_tuple should not be defined before c++17"
 # endif
@@ -74,6 +83,10 @@
 #   error "__cpp_lib_apply should have the value 201603L in c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_tuple
+#   error "__cpp_lib_constexpr_tuple should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_make_from_tuple
 #   error "__cpp_lib_make_from_tuple should be defined in c++17"
 # endif
@@ -104,6 +117,19 @@
 #   error "__cpp_lib_apply should have the value 201603L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_tuple
+#     error "__cpp_lib_constexpr_tuple should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_tuple != 201811L
+#     error "__cpp_lib_constexpr_tuple should have the value 201811L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_tuple
+#     error "__cpp_lib_constexpr_tuple should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_make_from_tuple
 #   error "__cpp_lib_make_from_tuple should be defined in c++20"
 # endif

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp
index 487fc8d68cb7..bc605e40c7f8 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/type_traits.version.pass.cpp
@@ -15,15 +15,20 @@
 
 /*  Constant                                       Value
     __cpp_lib_bool_constant                        201505L [C++17]
+    __cpp_lib_bounded_array_traits                 201902L [C++20]
     __cpp_lib_has_unique_object_representations    201606L [C++17]
     __cpp_lib_integral_constant_callable           201304L [C++14]
     __cpp_lib_is_aggregate                         201703L [C++17]
     __cpp_lib_is_constant_evaluated                201811L [C++20]
     __cpp_lib_is_final                             201402L [C++14]
     __cpp_lib_is_invocable                         201703L [C++17]
+    __cpp_lib_is_layout_compatible                 201907L [C++20]
+    __cpp_lib_is_nothrow_convertible               201806L [C++20]
     __cpp_lib_is_null_pointer                      201309L [C++14]
+    __cpp_lib_is_pointer_interconvertible          201907L [C++20]
     __cpp_lib_is_swappable                         201603L [C++17]
     __cpp_lib_logical_traits                       201510L [C++17]
+    __cpp_lib_remove_cvref                         201711L [C++20]
     __cpp_lib_result_of_sfinae                     201210L [C++14]
     __cpp_lib_transformation_trait_aliases         201304L [C++14]
     __cpp_lib_type_trait_variable_templates        201510L [C++17]
@@ -39,6 +44,10 @@
 #   error "__cpp_lib_bool_constant should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_bounded_array_traits
+#   error "__cpp_lib_bounded_array_traits should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_has_unique_object_representations
 #   error "__cpp_lib_has_unique_object_representations should not be defined before c++17"
 # endif
@@ -63,10 +72,22 @@
 #   error "__cpp_lib_is_invocable should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_is_layout_compatible
+#   error "__cpp_lib_is_layout_compatible should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_is_nothrow_convertible
+#   error "__cpp_lib_is_nothrow_convertible should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_is_null_pointer
 #   error "__cpp_lib_is_null_pointer should not be defined before c++14"
 # endif
 
+# ifdef __cpp_lib_is_pointer_interconvertible
+#   error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_is_swappable
 #   error "__cpp_lib_is_swappable should not be defined before c++17"
 # endif
@@ -75,6 +96,10 @@
 #   error "__cpp_lib_logical_traits should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_remove_cvref
+#   error "__cpp_lib_remove_cvref should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_result_of_sfinae
 #   error "__cpp_lib_result_of_sfinae should not be defined before c++14"
 # endif
@@ -97,6 +122,10 @@
 #   error "__cpp_lib_bool_constant should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_bounded_array_traits
+#   error "__cpp_lib_bounded_array_traits should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_has_unique_object_representations
 #   error "__cpp_lib_has_unique_object_representations should not be defined before c++17"
 # endif
@@ -127,6 +156,14 @@
 #   error "__cpp_lib_is_invocable should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_is_layout_compatible
+#   error "__cpp_lib_is_layout_compatible should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_is_nothrow_convertible
+#   error "__cpp_lib_is_nothrow_convertible should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_is_null_pointer
 #   error "__cpp_lib_is_null_pointer should be defined in c++14"
 # endif
@@ -134,6 +171,10 @@
 #   error "__cpp_lib_is_null_pointer should have the value 201309L in c++14"
 # endif
 
+# ifdef __cpp_lib_is_pointer_interconvertible
+#   error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_is_swappable
 #   error "__cpp_lib_is_swappable should not be defined before c++17"
 # endif
@@ -142,6 +183,10 @@
 #   error "__cpp_lib_logical_traits should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_remove_cvref
+#   error "__cpp_lib_remove_cvref should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_result_of_sfinae
 #   error "__cpp_lib_result_of_sfinae should be defined in c++14"
 # endif
@@ -173,6 +218,10 @@
 #   error "__cpp_lib_bool_constant should have the value 201505L in c++17"
 # endif
 
+# ifdef __cpp_lib_bounded_array_traits
+#   error "__cpp_lib_bounded_array_traits should not be defined before c++20"
+# endif
+
 # if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700
 #   ifndef __cpp_lib_has_unique_object_representations
 #     error "__cpp_lib_has_unique_object_representations should be defined in c++17"
@@ -224,6 +273,14 @@
 #   error "__cpp_lib_is_invocable should have the value 201703L in c++17"
 # endif
 
+# ifdef __cpp_lib_is_layout_compatible
+#   error "__cpp_lib_is_layout_compatible should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_is_nothrow_convertible
+#   error "__cpp_lib_is_nothrow_convertible should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_is_null_pointer
 #   error "__cpp_lib_is_null_pointer should be defined in c++17"
 # endif
@@ -231,6 +288,10 @@
 #   error "__cpp_lib_is_null_pointer should have the value 201309L in c++17"
 # endif
 
+# ifdef __cpp_lib_is_pointer_interconvertible
+#   error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_is_swappable
 #   error "__cpp_lib_is_swappable should be defined in c++17"
 # endif
@@ -245,6 +306,10 @@
 #   error "__cpp_lib_logical_traits should have the value 201510L in c++17"
 # endif
 
+# ifdef __cpp_lib_remove_cvref
+#   error "__cpp_lib_remove_cvref should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_result_of_sfinae
 #   error "__cpp_lib_result_of_sfinae should be defined in c++17"
 # endif
@@ -282,6 +347,13 @@
 #   error "__cpp_lib_bool_constant should have the value 201505L in c++20"
 # endif
 
+# ifndef __cpp_lib_bounded_array_traits
+#   error "__cpp_lib_bounded_array_traits should be defined in c++20"
+# endif
+# if __cpp_lib_bounded_array_traits != 201902L
+#   error "__cpp_lib_bounded_array_traits should have the value 201902L in c++20"
+# endif
+
 # if TEST_HAS_BUILTIN_IDENTIFIER(__has_unique_object_representations) || TEST_GCC_VER >= 700
 #   ifndef __cpp_lib_has_unique_object_representations
 #     error "__cpp_lib_has_unique_object_representations should be defined in c++20"
@@ -342,6 +414,26 @@
 #   error "__cpp_lib_is_invocable should have the value 201703L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_is_layout_compatible
+#     error "__cpp_lib_is_layout_compatible should be defined in c++20"
+#   endif
+#   if __cpp_lib_is_layout_compatible != 201907L
+#     error "__cpp_lib_is_layout_compatible should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_is_layout_compatible
+#     error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# ifndef __cpp_lib_is_nothrow_convertible
+#   error "__cpp_lib_is_nothrow_convertible should be defined in c++20"
+# endif
+# if __cpp_lib_is_nothrow_convertible != 201806L
+#   error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++20"
+# endif
+
 # ifndef __cpp_lib_is_null_pointer
 #   error "__cpp_lib_is_null_pointer should be defined in c++20"
 # endif
@@ -349,6 +441,19 @@
 #   error "__cpp_lib_is_null_pointer should have the value 201309L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_is_pointer_interconvertible
+#     error "__cpp_lib_is_pointer_interconvertible should be defined in c++20"
+#   endif
+#   if __cpp_lib_is_pointer_interconvertible != 201907L
+#     error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_is_pointer_interconvertible
+#     error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_is_swappable
 #   error "__cpp_lib_is_swappable should be defined in c++20"
 # endif
@@ -363,6 +468,13 @@
 #   error "__cpp_lib_logical_traits should have the value 201510L in c++20"
 # endif
 
+# ifndef __cpp_lib_remove_cvref
+#   error "__cpp_lib_remove_cvref should be defined in c++20"
+# endif
+# if __cpp_lib_remove_cvref != 201711L
+#   error "__cpp_lib_remove_cvref should have the value 201711L in c++20"
+# endif
+
 # ifndef __cpp_lib_result_of_sfinae
 #   error "__cpp_lib_result_of_sfinae should be defined in c++20"
 # endif

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp
index a5e1d715b307..2cbf6c4810df 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/utility.version.pass.cpp
@@ -13,13 +13,14 @@
 
 // Test the feature test macros defined by <utility>
 
-/*  Constant                       Value
-    __cpp_lib_as_const             201510L [C++17]
-    __cpp_lib_constexpr_utility    201811L [C++20]
-    __cpp_lib_exchange_function    201304L [C++14]
-    __cpp_lib_integer_sequence     201304L [C++14]
-    __cpp_lib_to_chars             201611L [C++17]
-    __cpp_lib_tuples_by_type       201304L [C++14]
+/*  Constant                                  Value
+    __cpp_lib_as_const                        201510L [C++17]
+    __cpp_lib_constexpr_utility               201811L [C++20]
+    __cpp_lib_exchange_function               201304L [C++14]
+    __cpp_lib_integer_comparison_functions    202002L [C++20]
+    __cpp_lib_integer_sequence                201304L [C++14]
+    __cpp_lib_to_chars                        201611L [C++17]
+    __cpp_lib_tuples_by_type                  201304L [C++14]
 */
 
 #include <utility>
@@ -39,6 +40,10 @@
 #   error "__cpp_lib_exchange_function should not be defined before c++14"
 # endif
 
+# ifdef __cpp_lib_integer_comparison_functions
+#   error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_integer_sequence
 #   error "__cpp_lib_integer_sequence should not be defined before c++14"
 # endif
@@ -68,6 +73,10 @@
 #   error "__cpp_lib_exchange_function should have the value 201304L in c++14"
 # endif
 
+# ifdef __cpp_lib_integer_comparison_functions
+#   error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_integer_sequence
 #   error "__cpp_lib_integer_sequence should be defined in c++14"
 # endif
@@ -106,6 +115,10 @@
 #   error "__cpp_lib_exchange_function should have the value 201304L in c++17"
 # endif
 
+# ifdef __cpp_lib_integer_comparison_functions
+#   error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_integer_sequence
 #   error "__cpp_lib_integer_sequence should be defined in c++17"
 # endif
@@ -156,6 +169,19 @@
 #   error "__cpp_lib_exchange_function should have the value 201304L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_integer_comparison_functions
+#     error "__cpp_lib_integer_comparison_functions should be defined in c++20"
+#   endif
+#   if __cpp_lib_integer_comparison_functions != 202002L
+#     error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_integer_comparison_functions
+#     error "__cpp_lib_integer_comparison_functions should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_integer_sequence
 #   error "__cpp_lib_integer_sequence should be defined in c++20"
 # endif

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp
index 13e869dd205a..2541d9df8137 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/vector.version.pass.cpp
@@ -15,6 +15,7 @@
 
 /*  Constant                                      Value
     __cpp_lib_allocator_traits_is_always_equal    201411L [C++17]
+    __cpp_lib_constexpr_vector                    201907L [C++20]
     __cpp_lib_erase_if                            202002L [C++20]
     __cpp_lib_incomplete_container_elements       201505L [C++17]
     __cpp_lib_nonmember_container_access          201411L [C++17]
@@ -29,6 +30,10 @@
 #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_vector
+#   error "__cpp_lib_constexpr_vector should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_erase_if
 #   error "__cpp_lib_erase_if should not be defined before c++20"
 # endif
@@ -47,6 +52,10 @@
 #   error "__cpp_lib_allocator_traits_is_always_equal should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_vector
+#   error "__cpp_lib_constexpr_vector should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_erase_if
 #   error "__cpp_lib_erase_if should not be defined before c++20"
 # endif
@@ -68,6 +77,10 @@
 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++17"
 # endif
 
+# ifdef __cpp_lib_constexpr_vector
+#   error "__cpp_lib_constexpr_vector should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_erase_if
 #   error "__cpp_lib_erase_if should not be defined before c++20"
 # endif
@@ -95,6 +108,19 @@
 #   error "__cpp_lib_allocator_traits_is_always_equal should have the value 201411L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_vector
+#     error "__cpp_lib_constexpr_vector should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_vector != 201907L
+#     error "__cpp_lib_constexpr_vector should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_vector
+#     error "__cpp_lib_constexpr_vector should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_erase_if
 #   error "__cpp_lib_erase_if should be defined in c++20"
 # endif

diff  --git a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp
index 3f5ff3cdaeaf..e6904667e390 100644
--- a/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp
+++ b/libcxx/test/std/language.support/support.limits/support.limits.general/version.version.pass.cpp
@@ -21,6 +21,7 @@
     __cpp_lib_array_constexpr                      201603L [C++17]
                                                    201811L [C++20]
     __cpp_lib_as_const                             201510L [C++17]
+    __cpp_lib_assume_aligned                       201811L [C++20]
     __cpp_lib_atomic_flag_test                     201907L [C++20]
     __cpp_lib_atomic_float                         201711L [C++20]
     __cpp_lib_atomic_is_always_lock_free           201603L [C++17]
@@ -29,9 +30,12 @@
     __cpp_lib_atomic_shared_ptr                    201711L [C++20]
     __cpp_lib_atomic_value_initialization          201911L [C++20]
     __cpp_lib_atomic_wait                          201907L [C++20]
-    __cpp_lib_bind_front                           201811L [C++20]
+    __cpp_lib_barrier                              201907L [C++20]
+    __cpp_lib_bind_front                           201907L [C++20]
     __cpp_lib_bit_cast                             201806L [C++20]
+    __cpp_lib_bitops                               201907L [C++20]
     __cpp_lib_bool_constant                        201505L [C++17]
+    __cpp_lib_bounded_array_traits                 201902L [C++20]
     __cpp_lib_boyer_moore_searcher                 201603L [C++17]
     __cpp_lib_byte                                 201603L [C++17]
     __cpp_lib_char8_t                              201811L [C++20]
@@ -39,18 +43,27 @@
     __cpp_lib_chrono_udls                          201304L [C++14]
     __cpp_lib_clamp                                201603L [C++17]
     __cpp_lib_complex_udls                         201309L [C++14]
-    __cpp_lib_concepts                             201806L [C++20]
+    __cpp_lib_concepts                             202002L [C++20]
+    __cpp_lib_constexpr_algorithms                 201806L [C++20]
+    __cpp_lib_constexpr_complex                    201711L [C++20]
     __cpp_lib_constexpr_dynamic_alloc              201907L [C++20]
     __cpp_lib_constexpr_functional                 201907L [C++20]
+    __cpp_lib_constexpr_iterator                   201811L [C++20]
+    __cpp_lib_constexpr_memory                     201811L [C++20]
     __cpp_lib_constexpr_numeric                    201911L [C++20]
-    __cpp_lib_constexpr_swap_algorithms            201806L [C++20]
+    __cpp_lib_constexpr_string                     201907L [C++20]
+    __cpp_lib_constexpr_string_view                201811L [C++20]
+    __cpp_lib_constexpr_tuple                      201811L [C++20]
     __cpp_lib_constexpr_utility                    201811L [C++20]
+    __cpp_lib_constexpr_vector                     201907L [C++20]
+    __cpp_lib_coroutine                            201902L [C++20]
     __cpp_lib_destroying_delete                    201806L [C++20]
     __cpp_lib_enable_shared_from_this              201603L [C++17]
     __cpp_lib_endian                               201907L [C++20]
     __cpp_lib_erase_if                             202002L [C++20]
     __cpp_lib_exchange_function                    201304L [C++14]
     __cpp_lib_execution                            201603L [C++17]
+                                                   201902L [C++20]
     __cpp_lib_filesystem                           201703L [C++17]
     __cpp_lib_gcd_lcm                              201606L [C++17]
     __cpp_lib_generic_associative_lookup           201304L [C++14]
@@ -60,6 +73,7 @@
     __cpp_lib_hypot                                201603L [C++17]
     __cpp_lib_incomplete_container_elements        201505L [C++17]
     __cpp_lib_int_pow2                             202002L [C++20]
+    __cpp_lib_integer_comparison_functions         202002L [C++20]
     __cpp_lib_integer_sequence                     201304L [C++14]
     __cpp_lib_integral_constant_callable           201304L [C++14]
     __cpp_lib_interpolate                          201902L [C++20]
@@ -68,8 +82,13 @@
     __cpp_lib_is_constant_evaluated                201811L [C++20]
     __cpp_lib_is_final                             201402L [C++14]
     __cpp_lib_is_invocable                         201703L [C++17]
+    __cpp_lib_is_layout_compatible                 201907L [C++20]
+    __cpp_lib_is_nothrow_convertible               201806L [C++20]
     __cpp_lib_is_null_pointer                      201309L [C++14]
+    __cpp_lib_is_pointer_interconvertible          201907L [C++20]
     __cpp_lib_is_swappable                         201603L [C++17]
+    __cpp_lib_jthread                              201911L [C++20]
+    __cpp_lib_latch                                201907L [C++20]
     __cpp_lib_launder                              201606L [C++17]
     __cpp_lib_list_remove_return_type              201806L [C++20]
     __cpp_lib_logical_traits                       201510L [C++17]
@@ -86,21 +105,32 @@
     __cpp_lib_null_iterators                       201304L [C++14]
     __cpp_lib_optional                             201606L [C++17]
     __cpp_lib_parallel_algorithm                   201603L [C++17]
+    __cpp_lib_polymorphic_allocator                201902L [C++20]
     __cpp_lib_quoted_string_io                     201304L [C++14]
     __cpp_lib_ranges                               201811L [C++20]
     __cpp_lib_raw_memory_algorithms                201606L [C++17]
+    __cpp_lib_remove_cvref                         201711L [C++20]
     __cpp_lib_result_of_sfinae                     201210L [C++14]
     __cpp_lib_robust_nonmodifying_seq_ops          201304L [C++14]
     __cpp_lib_sample                               201603L [C++17]
     __cpp_lib_scoped_lock                          201703L [C++17]
+    __cpp_lib_semaphore                            201907L [C++20]
     __cpp_lib_shared_mutex                         201505L [C++17]
     __cpp_lib_shared_ptr_arrays                    201611L [C++17]
     __cpp_lib_shared_ptr_weak_type                 201606L [C++17]
     __cpp_lib_shared_timed_mutex                   201402L [C++14]
+    __cpp_lib_shift                                201806L [C++20]
+    __cpp_lib_smart_ptr_for_overwrite              202002L [C++20]
+    __cpp_lib_source_location                      201907L [C++20]
     __cpp_lib_span                                 202002L [C++20]
+    __cpp_lib_ssize                                201902L [C++20]
+    __cpp_lib_starts_ends_with                     201711L [C++20]
     __cpp_lib_string_udls                          201304L [C++14]
     __cpp_lib_string_view                          201606L [C++17]
-    __cpp_lib_three_way_comparison                 201711L [C++20]
+                                                   201803L [C++20]
+    __cpp_lib_syncbuf                              201803L [C++20]
+    __cpp_lib_three_way_comparison                 201907L [C++20]
+    __cpp_lib_to_address                           201711L [C++20]
     __cpp_lib_to_array                             201907L [C++20]
     __cpp_lib_to_chars                             201611L [C++17]
     __cpp_lib_transformation_trait_aliases         201304L [C++14]
@@ -111,6 +141,7 @@
     __cpp_lib_type_trait_variable_templates        201510L [C++17]
     __cpp_lib_uncaught_exceptions                  201411L [C++17]
     __cpp_lib_unordered_map_try_emplace            201411L [C++17]
+    __cpp_lib_unwrap_ref                           201811L [C++20]
     __cpp_lib_variant                              201606L [C++17]
     __cpp_lib_void_t                               201411L [C++17]
 */
@@ -144,6 +175,10 @@
 #   error "__cpp_lib_as_const should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_assume_aligned
+#   error "__cpp_lib_assume_aligned should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_atomic_flag_test
 #   error "__cpp_lib_atomic_flag_test should not be defined before c++20"
 # endif
@@ -176,6 +211,10 @@
 #   error "__cpp_lib_atomic_wait should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_barrier
+#   error "__cpp_lib_barrier should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_bind_front
 #   error "__cpp_lib_bind_front should not be defined before c++20"
 # endif
@@ -184,10 +223,18 @@
 #   error "__cpp_lib_bit_cast should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_bitops
+#   error "__cpp_lib_bitops should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_bool_constant
 #   error "__cpp_lib_bool_constant should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_bounded_array_traits
+#   error "__cpp_lib_bounded_array_traits should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_boyer_moore_searcher
 #   error "__cpp_lib_boyer_moore_searcher should not be defined before c++17"
 # endif
@@ -220,6 +267,14 @@
 #   error "__cpp_lib_concepts should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_algorithms
+#   error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_complex
+#   error "__cpp_lib_constexpr_complex should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_constexpr_dynamic_alloc
 #   error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20"
 # endif
@@ -228,18 +283,42 @@
 #   error "__cpp_lib_constexpr_functional should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_iterator
+#   error "__cpp_lib_constexpr_iterator should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_memory
+#   error "__cpp_lib_constexpr_memory should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_constexpr_numeric
 #   error "__cpp_lib_constexpr_numeric should not be defined before c++20"
 # endif
 
-# ifdef __cpp_lib_constexpr_swap_algorithms
-#   error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++20"
+# ifdef __cpp_lib_constexpr_string
+#   error "__cpp_lib_constexpr_string should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_string_view
+#   error "__cpp_lib_constexpr_string_view should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_tuple
+#   error "__cpp_lib_constexpr_tuple should not be defined before c++20"
 # endif
 
 # ifdef __cpp_lib_constexpr_utility
 #   error "__cpp_lib_constexpr_utility should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_vector
+#   error "__cpp_lib_constexpr_vector should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_coroutine
+#   error "__cpp_lib_coroutine should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_destroying_delete
 #   error "__cpp_lib_destroying_delete should not be defined before c++20"
 # endif
@@ -300,6 +379,10 @@
 #   error "__cpp_lib_int_pow2 should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_integer_comparison_functions
+#   error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_integer_sequence
 #   error "__cpp_lib_integer_sequence should not be defined before c++14"
 # endif
@@ -332,14 +415,34 @@
 #   error "__cpp_lib_is_invocable should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_is_layout_compatible
+#   error "__cpp_lib_is_layout_compatible should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_is_nothrow_convertible
+#   error "__cpp_lib_is_nothrow_convertible should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_is_null_pointer
 #   error "__cpp_lib_is_null_pointer should not be defined before c++14"
 # endif
 
+# ifdef __cpp_lib_is_pointer_interconvertible
+#   error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_is_swappable
 #   error "__cpp_lib_is_swappable should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_jthread
+#   error "__cpp_lib_jthread should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_latch
+#   error "__cpp_lib_latch should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_launder
 #   error "__cpp_lib_launder should not be defined before c++17"
 # endif
@@ -404,6 +507,10 @@
 #   error "__cpp_lib_parallel_algorithm should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_polymorphic_allocator
+#   error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_quoted_string_io
 #   error "__cpp_lib_quoted_string_io should not be defined before c++14"
 # endif
@@ -416,6 +523,10 @@
 #   error "__cpp_lib_raw_memory_algorithms should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_remove_cvref
+#   error "__cpp_lib_remove_cvref should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_result_of_sfinae
 #   error "__cpp_lib_result_of_sfinae should not be defined before c++14"
 # endif
@@ -432,6 +543,10 @@
 #   error "__cpp_lib_scoped_lock should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_semaphore
+#   error "__cpp_lib_semaphore should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_shared_mutex
 #   error "__cpp_lib_shared_mutex should not be defined before c++17"
 # endif
@@ -448,10 +563,30 @@
 #   error "__cpp_lib_shared_timed_mutex should not be defined before c++14"
 # endif
 
+# ifdef __cpp_lib_shift
+#   error "__cpp_lib_shift should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_smart_ptr_for_overwrite
+#   error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_source_location
+#   error "__cpp_lib_source_location should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_span
 #   error "__cpp_lib_span should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_ssize
+#   error "__cpp_lib_ssize should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_string_udls
 #   error "__cpp_lib_string_udls should not be defined before c++14"
 # endif
@@ -460,10 +595,18 @@
 #   error "__cpp_lib_string_view should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_syncbuf
+#   error "__cpp_lib_syncbuf should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_three_way_comparison
 #   error "__cpp_lib_three_way_comparison should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_to_address
+#   error "__cpp_lib_to_address should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_to_array
 #   error "__cpp_lib_to_array should not be defined before c++20"
 # endif
@@ -500,6 +643,10 @@
 #   error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_unwrap_ref
+#   error "__cpp_lib_unwrap_ref should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_variant
 #   error "__cpp_lib_variant should not be defined before c++17"
 # endif
@@ -534,6 +681,10 @@
 #   error "__cpp_lib_as_const should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_assume_aligned
+#   error "__cpp_lib_assume_aligned should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_atomic_flag_test
 #   error "__cpp_lib_atomic_flag_test should not be defined before c++20"
 # endif
@@ -566,6 +717,10 @@
 #   error "__cpp_lib_atomic_wait should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_barrier
+#   error "__cpp_lib_barrier should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_bind_front
 #   error "__cpp_lib_bind_front should not be defined before c++20"
 # endif
@@ -574,10 +729,18 @@
 #   error "__cpp_lib_bit_cast should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_bitops
+#   error "__cpp_lib_bitops should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_bool_constant
 #   error "__cpp_lib_bool_constant should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_bounded_array_traits
+#   error "__cpp_lib_bounded_array_traits should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_boyer_moore_searcher
 #   error "__cpp_lib_boyer_moore_searcher should not be defined before c++17"
 # endif
@@ -616,6 +779,14 @@
 #   error "__cpp_lib_concepts should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_algorithms
+#   error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_complex
+#   error "__cpp_lib_constexpr_complex should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_constexpr_dynamic_alloc
 #   error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20"
 # endif
@@ -624,18 +795,42 @@
 #   error "__cpp_lib_constexpr_functional should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_iterator
+#   error "__cpp_lib_constexpr_iterator should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_memory
+#   error "__cpp_lib_constexpr_memory should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_constexpr_numeric
 #   error "__cpp_lib_constexpr_numeric should not be defined before c++20"
 # endif
 
-# ifdef __cpp_lib_constexpr_swap_algorithms
-#   error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++20"
+# ifdef __cpp_lib_constexpr_string
+#   error "__cpp_lib_constexpr_string should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_string_view
+#   error "__cpp_lib_constexpr_string_view should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_tuple
+#   error "__cpp_lib_constexpr_tuple should not be defined before c++20"
 # endif
 
 # ifdef __cpp_lib_constexpr_utility
 #   error "__cpp_lib_constexpr_utility should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_vector
+#   error "__cpp_lib_constexpr_vector should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_coroutine
+#   error "__cpp_lib_coroutine should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_destroying_delete
 #   error "__cpp_lib_destroying_delete should not be defined before c++20"
 # endif
@@ -702,6 +897,10 @@
 #   error "__cpp_lib_int_pow2 should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_integer_comparison_functions
+#   error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_integer_sequence
 #   error "__cpp_lib_integer_sequence should be defined in c++14"
 # endif
@@ -743,6 +942,14 @@
 #   error "__cpp_lib_is_invocable should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_is_layout_compatible
+#   error "__cpp_lib_is_layout_compatible should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_is_nothrow_convertible
+#   error "__cpp_lib_is_nothrow_convertible should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_is_null_pointer
 #   error "__cpp_lib_is_null_pointer should be defined in c++14"
 # endif
@@ -750,10 +957,22 @@
 #   error "__cpp_lib_is_null_pointer should have the value 201309L in c++14"
 # endif
 
+# ifdef __cpp_lib_is_pointer_interconvertible
+#   error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_is_swappable
 #   error "__cpp_lib_is_swappable should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_jthread
+#   error "__cpp_lib_jthread should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_latch
+#   error "__cpp_lib_latch should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_launder
 #   error "__cpp_lib_launder should not be defined before c++17"
 # endif
@@ -827,6 +1046,10 @@
 #   error "__cpp_lib_parallel_algorithm should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_polymorphic_allocator
+#   error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_quoted_string_io
 #   error "__cpp_lib_quoted_string_io should be defined in c++14"
 # endif
@@ -842,6 +1065,10 @@
 #   error "__cpp_lib_raw_memory_algorithms should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_remove_cvref
+#   error "__cpp_lib_remove_cvref should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_result_of_sfinae
 #   error "__cpp_lib_result_of_sfinae should be defined in c++14"
 # endif
@@ -864,6 +1091,10 @@
 #   error "__cpp_lib_scoped_lock should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_semaphore
+#   error "__cpp_lib_semaphore should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_shared_mutex
 #   error "__cpp_lib_shared_mutex should not be defined before c++17"
 # endif
@@ -889,10 +1120,30 @@
 #   endif
 # endif
 
+# ifdef __cpp_lib_shift
+#   error "__cpp_lib_shift should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_smart_ptr_for_overwrite
+#   error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_source_location
+#   error "__cpp_lib_source_location should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_span
 #   error "__cpp_lib_span should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_ssize
+#   error "__cpp_lib_ssize should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_string_udls
 #   error "__cpp_lib_string_udls should be defined in c++14"
 # endif
@@ -904,10 +1155,18 @@
 #   error "__cpp_lib_string_view should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_syncbuf
+#   error "__cpp_lib_syncbuf should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_three_way_comparison
 #   error "__cpp_lib_three_way_comparison should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_to_address
+#   error "__cpp_lib_to_address should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_to_array
 #   error "__cpp_lib_to_array should not be defined before c++20"
 # endif
@@ -956,6 +1215,10 @@
 #   error "__cpp_lib_unordered_map_try_emplace should not be defined before c++17"
 # endif
 
+# ifdef __cpp_lib_unwrap_ref
+#   error "__cpp_lib_unwrap_ref should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_variant
 #   error "__cpp_lib_variant should not be defined before c++17"
 # endif
@@ -1014,6 +1277,10 @@
 #   error "__cpp_lib_as_const should have the value 201510L in c++17"
 # endif
 
+# ifdef __cpp_lib_assume_aligned
+#   error "__cpp_lib_assume_aligned should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_atomic_flag_test
 #   error "__cpp_lib_atomic_flag_test should not be defined before c++20"
 # endif
@@ -1055,6 +1322,10 @@
 #   error "__cpp_lib_atomic_wait should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_barrier
+#   error "__cpp_lib_barrier should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_bind_front
 #   error "__cpp_lib_bind_front should not be defined before c++20"
 # endif
@@ -1063,6 +1334,10 @@
 #   error "__cpp_lib_bit_cast should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_bitops
+#   error "__cpp_lib_bitops should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_bool_constant
 #   error "__cpp_lib_bool_constant should be defined in c++17"
 # endif
@@ -1070,6 +1345,10 @@
 #   error "__cpp_lib_bool_constant should have the value 201505L in c++17"
 # endif
 
+# ifdef __cpp_lib_bounded_array_traits
+#   error "__cpp_lib_bounded_array_traits should not be defined before c++20"
+# endif
+
 # if !defined(_LIBCPP_VERSION)
 #   ifndef __cpp_lib_boyer_moore_searcher
 #     error "__cpp_lib_boyer_moore_searcher should be defined in c++17"
@@ -1126,6 +1405,14 @@
 #   error "__cpp_lib_concepts should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_algorithms
+#   error "__cpp_lib_constexpr_algorithms should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_complex
+#   error "__cpp_lib_constexpr_complex should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_constexpr_dynamic_alloc
 #   error "__cpp_lib_constexpr_dynamic_alloc should not be defined before c++20"
 # endif
@@ -1134,18 +1421,42 @@
 #   error "__cpp_lib_constexpr_functional should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_iterator
+#   error "__cpp_lib_constexpr_iterator should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_memory
+#   error "__cpp_lib_constexpr_memory should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_constexpr_numeric
 #   error "__cpp_lib_constexpr_numeric should not be defined before c++20"
 # endif
 
-# ifdef __cpp_lib_constexpr_swap_algorithms
-#   error "__cpp_lib_constexpr_swap_algorithms should not be defined before c++20"
+# ifdef __cpp_lib_constexpr_string
+#   error "__cpp_lib_constexpr_string should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_string_view
+#   error "__cpp_lib_constexpr_string_view should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_constexpr_tuple
+#   error "__cpp_lib_constexpr_tuple should not be defined before c++20"
 # endif
 
 # ifdef __cpp_lib_constexpr_utility
 #   error "__cpp_lib_constexpr_utility should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_constexpr_vector
+#   error "__cpp_lib_constexpr_vector should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_coroutine
+#   error "__cpp_lib_coroutine should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_destroying_delete
 #   error "__cpp_lib_destroying_delete should not be defined before c++20"
 # endif
@@ -1254,6 +1565,10 @@
 #   error "__cpp_lib_int_pow2 should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_integer_comparison_functions
+#   error "__cpp_lib_integer_comparison_functions should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_integer_sequence
 #   error "__cpp_lib_integer_sequence should be defined in c++17"
 # endif
@@ -1310,6 +1625,14 @@
 #   error "__cpp_lib_is_invocable should have the value 201703L in c++17"
 # endif
 
+# ifdef __cpp_lib_is_layout_compatible
+#   error "__cpp_lib_is_layout_compatible should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_is_nothrow_convertible
+#   error "__cpp_lib_is_nothrow_convertible should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_is_null_pointer
 #   error "__cpp_lib_is_null_pointer should be defined in c++17"
 # endif
@@ -1317,6 +1640,10 @@
 #   error "__cpp_lib_is_null_pointer should have the value 201309L in c++17"
 # endif
 
+# ifdef __cpp_lib_is_pointer_interconvertible
+#   error "__cpp_lib_is_pointer_interconvertible should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_is_swappable
 #   error "__cpp_lib_is_swappable should be defined in c++17"
 # endif
@@ -1324,6 +1651,14 @@
 #   error "__cpp_lib_is_swappable should have the value 201603L in c++17"
 # endif
 
+# ifdef __cpp_lib_jthread
+#   error "__cpp_lib_jthread should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_latch
+#   error "__cpp_lib_latch should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_launder
 #   error "__cpp_lib_launder should be defined in c++17"
 # endif
@@ -1448,6 +1783,10 @@
 #   endif
 # endif
 
+# ifdef __cpp_lib_polymorphic_allocator
+#   error "__cpp_lib_polymorphic_allocator should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_quoted_string_io
 #   error "__cpp_lib_quoted_string_io should be defined in c++17"
 # endif
@@ -1466,6 +1805,10 @@
 #   error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++17"
 # endif
 
+# ifdef __cpp_lib_remove_cvref
+#   error "__cpp_lib_remove_cvref should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_result_of_sfinae
 #   error "__cpp_lib_result_of_sfinae should be defined in c++17"
 # endif
@@ -1494,6 +1837,10 @@
 #   error "__cpp_lib_scoped_lock should have the value 201703L in c++17"
 # endif
 
+# ifdef __cpp_lib_semaphore
+#   error "__cpp_lib_semaphore should not be defined before c++20"
+# endif
+
 # if !defined(_LIBCPP_HAS_NO_THREADS)
 #   ifndef __cpp_lib_shared_mutex
 #     error "__cpp_lib_shared_mutex should be defined in c++17"
@@ -1534,10 +1881,30 @@
 #   endif
 # endif
 
+# ifdef __cpp_lib_shift
+#   error "__cpp_lib_shift should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_smart_ptr_for_overwrite
+#   error "__cpp_lib_smart_ptr_for_overwrite should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_source_location
+#   error "__cpp_lib_source_location should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_span
 #   error "__cpp_lib_span should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_ssize
+#   error "__cpp_lib_ssize should not be defined before c++20"
+# endif
+
+# ifdef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_string_udls
 #   error "__cpp_lib_string_udls should be defined in c++17"
 # endif
@@ -1552,10 +1919,18 @@
 #   error "__cpp_lib_string_view should have the value 201606L in c++17"
 # endif
 
+# ifdef __cpp_lib_syncbuf
+#   error "__cpp_lib_syncbuf should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_three_way_comparison
 #   error "__cpp_lib_three_way_comparison should not be defined before c++20"
 # endif
 
+# ifdef __cpp_lib_to_address
+#   error "__cpp_lib_to_address should not be defined before c++20"
+# endif
+
 # ifdef __cpp_lib_to_array
 #   error "__cpp_lib_to_array should not be defined before c++20"
 # endif
@@ -1622,6 +1997,10 @@
 #   error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++17"
 # endif
 
+# ifdef __cpp_lib_unwrap_ref
+#   error "__cpp_lib_unwrap_ref should not be defined before c++20"
+# endif
+
 # ifndef __cpp_lib_variant
 #   error "__cpp_lib_variant should be defined in c++17"
 # endif
@@ -1686,6 +2065,19 @@
 #   error "__cpp_lib_as_const should have the value 201510L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_assume_aligned
+#     error "__cpp_lib_assume_aligned should be defined in c++20"
+#   endif
+#   if __cpp_lib_assume_aligned != 201811L
+#     error "__cpp_lib_assume_aligned should have the value 201811L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_assume_aligned
+#     error "__cpp_lib_assume_aligned should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # if !defined(_LIBCPP_HAS_NO_THREADS)
 #   ifndef __cpp_lib_atomic_flag_test
 #     error "__cpp_lib_atomic_flag_test should be defined in c++20"
@@ -1790,12 +2182,25 @@
 #   endif
 # endif
 
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+#   ifndef __cpp_lib_barrier
+#     error "__cpp_lib_barrier should be defined in c++20"
+#   endif
+#   if __cpp_lib_barrier != 201907L
+#     error "__cpp_lib_barrier should have the value 201907L in c++20"
+#   endif
+# else
+#   ifdef __cpp_lib_barrier
+#     error "__cpp_lib_barrier should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
+#   endif
+# endif
+
 # if !defined(_LIBCPP_VERSION)
 #   ifndef __cpp_lib_bind_front
 #     error "__cpp_lib_bind_front should be defined in c++20"
 #   endif
-#   if __cpp_lib_bind_front != 201811L
-#     error "__cpp_lib_bind_front should have the value 201811L in c++20"
+#   if __cpp_lib_bind_front != 201907L
+#     error "__cpp_lib_bind_front should have the value 201907L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
 #   ifdef __cpp_lib_bind_front
@@ -1816,6 +2221,19 @@
 #   endif
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_bitops
+#     error "__cpp_lib_bitops should be defined in c++20"
+#   endif
+#   if __cpp_lib_bitops != 201907L
+#     error "__cpp_lib_bitops should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_bitops
+#     error "__cpp_lib_bitops should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_bool_constant
 #   error "__cpp_lib_bool_constant should be defined in c++20"
 # endif
@@ -1823,6 +2241,13 @@
 #   error "__cpp_lib_bool_constant should have the value 201505L in c++20"
 # endif
 
+# ifndef __cpp_lib_bounded_array_traits
+#   error "__cpp_lib_bounded_array_traits should be defined in c++20"
+# endif
+# if __cpp_lib_bounded_array_traits != 201902L
+#   error "__cpp_lib_bounded_array_traits should have the value 201902L in c++20"
+# endif
+
 # if !defined(_LIBCPP_VERSION)
 #   ifndef __cpp_lib_boyer_moore_searcher
 #     error "__cpp_lib_boyer_moore_searcher should be defined in c++20"
@@ -1888,8 +2313,8 @@
 #   ifndef __cpp_lib_concepts
 #     error "__cpp_lib_concepts should be defined in c++20"
 #   endif
-#   if __cpp_lib_concepts != 201806L
-#     error "__cpp_lib_concepts should have the value 201806L in c++20"
+#   if __cpp_lib_concepts != 202002L
+#     error "__cpp_lib_concepts should have the value 202002L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
 #   ifdef __cpp_lib_concepts
@@ -1897,6 +2322,32 @@
 #   endif
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_algorithms
+#     error "__cpp_lib_constexpr_algorithms should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_algorithms != 201806L
+#     error "__cpp_lib_constexpr_algorithms should have the value 201806L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_algorithms
+#     error "__cpp_lib_constexpr_algorithms should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_complex
+#     error "__cpp_lib_constexpr_complex should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_complex != 201711L
+#     error "__cpp_lib_constexpr_complex should have the value 201711L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_complex
+#     error "__cpp_lib_constexpr_complex should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_constexpr_dynamic_alloc
 #   error "__cpp_lib_constexpr_dynamic_alloc should be defined in c++20"
 # endif
@@ -1904,11 +2355,43 @@
 #   error "__cpp_lib_constexpr_dynamic_alloc should have the value 201907L in c++20"
 # endif
 
-# ifndef __cpp_lib_constexpr_functional
-#   error "__cpp_lib_constexpr_functional should be defined in c++20"
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_functional
+#     error "__cpp_lib_constexpr_functional should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_functional != 201907L
+#     error "__cpp_lib_constexpr_functional should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_functional
+#     error "__cpp_lib_constexpr_functional should not be defined because it is unimplemented in libc++!"
+#   endif
 # endif
-# if __cpp_lib_constexpr_functional != 201907L
-#   error "__cpp_lib_constexpr_functional should have the value 201907L in c++20"
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_iterator
+#     error "__cpp_lib_constexpr_iterator should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_iterator != 201811L
+#     error "__cpp_lib_constexpr_iterator should have the value 201811L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_iterator
+#     error "__cpp_lib_constexpr_iterator should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_memory
+#     error "__cpp_lib_constexpr_memory should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_memory != 201811L
+#     error "__cpp_lib_constexpr_memory should have the value 201811L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_memory
+#     error "__cpp_lib_constexpr_memory should not be defined because it is unimplemented in libc++!"
+#   endif
 # endif
 
 # ifndef __cpp_lib_constexpr_numeric
@@ -1919,15 +2402,41 @@
 # endif
 
 # if !defined(_LIBCPP_VERSION)
-#   ifndef __cpp_lib_constexpr_swap_algorithms
-#     error "__cpp_lib_constexpr_swap_algorithms should be defined in c++20"
+#   ifndef __cpp_lib_constexpr_string
+#     error "__cpp_lib_constexpr_string should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_string != 201907L
+#     error "__cpp_lib_constexpr_string should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_string
+#     error "__cpp_lib_constexpr_string should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_string_view
+#     error "__cpp_lib_constexpr_string_view should be defined in c++20"
 #   endif
-#   if __cpp_lib_constexpr_swap_algorithms != 201806L
-#     error "__cpp_lib_constexpr_swap_algorithms should have the value 201806L in c++20"
+#   if __cpp_lib_constexpr_string_view != 201811L
+#     error "__cpp_lib_constexpr_string_view should have the value 201811L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
-#   ifdef __cpp_lib_constexpr_swap_algorithms
-#     error "__cpp_lib_constexpr_swap_algorithms should not be defined because it is unimplemented in libc++!"
+#   ifdef __cpp_lib_constexpr_string_view
+#     error "__cpp_lib_constexpr_string_view should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_tuple
+#     error "__cpp_lib_constexpr_tuple should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_tuple != 201811L
+#     error "__cpp_lib_constexpr_tuple should have the value 201811L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_tuple
+#     error "__cpp_lib_constexpr_tuple should not be defined because it is unimplemented in libc++!"
 #   endif
 # endif
 
@@ -1938,6 +2447,32 @@
 #   error "__cpp_lib_constexpr_utility should have the value 201811L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_constexpr_vector
+#     error "__cpp_lib_constexpr_vector should be defined in c++20"
+#   endif
+#   if __cpp_lib_constexpr_vector != 201907L
+#     error "__cpp_lib_constexpr_vector should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_constexpr_vector
+#     error "__cpp_lib_constexpr_vector should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_coroutine
+#     error "__cpp_lib_coroutine should be defined in c++20"
+#   endif
+#   if __cpp_lib_coroutine != 201902L
+#     error "__cpp_lib_coroutine should have the value 201902L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_coroutine
+#     error "__cpp_lib_coroutine should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # if TEST_STD_VER > 17 && defined(__cpp_impl_destroying_delete) && __cpp_impl_destroying_delete >= 201806L
 #   ifndef __cpp_lib_destroying_delete
 #     error "__cpp_lib_destroying_delete should be defined in c++20"
@@ -1983,8 +2518,8 @@
 #   ifndef __cpp_lib_execution
 #     error "__cpp_lib_execution should be defined in c++20"
 #   endif
-#   if __cpp_lib_execution != 201603L
-#     error "__cpp_lib_execution should have the value 201603L in c++20"
+#   if __cpp_lib_execution != 201902L
+#     error "__cpp_lib_execution should have the value 201902L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
 #   ifdef __cpp_lib_execution
@@ -2067,6 +2602,19 @@
 #   error "__cpp_lib_int_pow2 should have the value 202002L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_integer_comparison_functions
+#     error "__cpp_lib_integer_comparison_functions should be defined in c++20"
+#   endif
+#   if __cpp_lib_integer_comparison_functions != 202002L
+#     error "__cpp_lib_integer_comparison_functions should have the value 202002L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_integer_comparison_functions
+#     error "__cpp_lib_integer_comparison_functions should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_integer_sequence
 #   error "__cpp_lib_integer_sequence should be defined in c++20"
 # endif
@@ -2135,6 +2683,26 @@
 #   error "__cpp_lib_is_invocable should have the value 201703L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_is_layout_compatible
+#     error "__cpp_lib_is_layout_compatible should be defined in c++20"
+#   endif
+#   if __cpp_lib_is_layout_compatible != 201907L
+#     error "__cpp_lib_is_layout_compatible should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_is_layout_compatible
+#     error "__cpp_lib_is_layout_compatible should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# ifndef __cpp_lib_is_nothrow_convertible
+#   error "__cpp_lib_is_nothrow_convertible should be defined in c++20"
+# endif
+# if __cpp_lib_is_nothrow_convertible != 201806L
+#   error "__cpp_lib_is_nothrow_convertible should have the value 201806L in c++20"
+# endif
+
 # ifndef __cpp_lib_is_null_pointer
 #   error "__cpp_lib_is_null_pointer should be defined in c++20"
 # endif
@@ -2142,6 +2710,19 @@
 #   error "__cpp_lib_is_null_pointer should have the value 201309L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_is_pointer_interconvertible
+#     error "__cpp_lib_is_pointer_interconvertible should be defined in c++20"
+#   endif
+#   if __cpp_lib_is_pointer_interconvertible != 201907L
+#     error "__cpp_lib_is_pointer_interconvertible should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_is_pointer_interconvertible
+#     error "__cpp_lib_is_pointer_interconvertible should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_is_swappable
 #   error "__cpp_lib_is_swappable should be defined in c++20"
 # endif
@@ -2149,6 +2730,32 @@
 #   error "__cpp_lib_is_swappable should have the value 201603L in c++20"
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_jthread
+#     error "__cpp_lib_jthread should be defined in c++20"
+#   endif
+#   if __cpp_lib_jthread != 201911L
+#     error "__cpp_lib_jthread should have the value 201911L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_jthread
+#     error "__cpp_lib_jthread should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+#   ifndef __cpp_lib_latch
+#     error "__cpp_lib_latch should be defined in c++20"
+#   endif
+#   if __cpp_lib_latch != 201907L
+#     error "__cpp_lib_latch should have the value 201907L in c++20"
+#   endif
+# else
+#   ifdef __cpp_lib_latch
+#     error "__cpp_lib_latch should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_launder
 #   error "__cpp_lib_launder should be defined in c++20"
 # endif
@@ -2285,6 +2892,19 @@
 #   endif
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_polymorphic_allocator
+#     error "__cpp_lib_polymorphic_allocator should be defined in c++20"
+#   endif
+#   if __cpp_lib_polymorphic_allocator != 201902L
+#     error "__cpp_lib_polymorphic_allocator should have the value 201902L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_polymorphic_allocator
+#     error "__cpp_lib_polymorphic_allocator should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_quoted_string_io
 #   error "__cpp_lib_quoted_string_io should be defined in c++20"
 # endif
@@ -2312,6 +2932,13 @@
 #   error "__cpp_lib_raw_memory_algorithms should have the value 201606L in c++20"
 # endif
 
+# ifndef __cpp_lib_remove_cvref
+#   error "__cpp_lib_remove_cvref should be defined in c++20"
+# endif
+# if __cpp_lib_remove_cvref != 201711L
+#   error "__cpp_lib_remove_cvref should have the value 201711L in c++20"
+# endif
+
 # ifndef __cpp_lib_result_of_sfinae
 #   error "__cpp_lib_result_of_sfinae should be defined in c++20"
 # endif
@@ -2340,6 +2967,19 @@
 #   error "__cpp_lib_scoped_lock should have the value 201703L in c++20"
 # endif
 
+# if !defined(_LIBCPP_HAS_NO_THREADS)
+#   ifndef __cpp_lib_semaphore
+#     error "__cpp_lib_semaphore should be defined in c++20"
+#   endif
+#   if __cpp_lib_semaphore != 201907L
+#     error "__cpp_lib_semaphore should have the value 201907L in c++20"
+#   endif
+# else
+#   ifdef __cpp_lib_semaphore
+#     error "__cpp_lib_semaphore should not be defined when !defined(_LIBCPP_HAS_NO_THREADS) is not defined!"
+#   endif
+# endif
+
 # if !defined(_LIBCPP_HAS_NO_THREADS)
 #   ifndef __cpp_lib_shared_mutex
 #     error "__cpp_lib_shared_mutex should be defined in c++20"
@@ -2380,6 +3020,45 @@
 #   endif
 # endif
 
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_shift
+#     error "__cpp_lib_shift should be defined in c++20"
+#   endif
+#   if __cpp_lib_shift != 201806L
+#     error "__cpp_lib_shift should have the value 201806L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_shift
+#     error "__cpp_lib_shift should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_smart_ptr_for_overwrite
+#     error "__cpp_lib_smart_ptr_for_overwrite should be defined in c++20"
+#   endif
+#   if __cpp_lib_smart_ptr_for_overwrite != 202002L
+#     error "__cpp_lib_smart_ptr_for_overwrite should have the value 202002L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_smart_ptr_for_overwrite
+#     error "__cpp_lib_smart_ptr_for_overwrite should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_source_location
+#     error "__cpp_lib_source_location should be defined in c++20"
+#   endif
+#   if __cpp_lib_source_location != 201907L
+#     error "__cpp_lib_source_location should have the value 201907L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_source_location
+#     error "__cpp_lib_source_location should not be defined because it is unimplemented in libc++!"
+#   endif
+# endif
+
 # ifndef __cpp_lib_span
 #   error "__cpp_lib_span should be defined in c++20"
 # endif
@@ -2387,6 +3066,20 @@
 #   error "__cpp_lib_span should have the value 202002L in c++20"
 # endif
 
+# ifndef __cpp_lib_ssize
+#   error "__cpp_lib_ssize should be defined in c++20"
+# endif
+# if __cpp_lib_ssize != 201902L
+#   error "__cpp_lib_ssize should have the value 201902L in c++20"
+# endif
+
+# ifndef __cpp_lib_starts_ends_with
+#   error "__cpp_lib_starts_ends_with should be defined in c++20"
+# endif
+# if __cpp_lib_starts_ends_with != 201711L
+#   error "__cpp_lib_starts_ends_with should have the value 201711L in c++20"
+# endif
+
 # ifndef __cpp_lib_string_udls
 #   error "__cpp_lib_string_udls should be defined in c++20"
 # endif
@@ -2397,16 +3090,29 @@
 # ifndef __cpp_lib_string_view
 #   error "__cpp_lib_string_view should be defined in c++20"
 # endif
-# if __cpp_lib_string_view != 201606L
-#   error "__cpp_lib_string_view should have the value 201606L in c++20"
+# if __cpp_lib_string_view != 201803L
+#   error "__cpp_lib_string_view should have the value 201803L in c++20"
+# endif
+
+# if !defined(_LIBCPP_VERSION)
+#   ifndef __cpp_lib_syncbuf
+#     error "__cpp_lib_syncbuf should be defined in c++20"
+#   endif
+#   if __cpp_lib_syncbuf != 201803L
+#     error "__cpp_lib_syncbuf should have the value 201803L in c++20"
+#   endif
+# else // _LIBCPP_VERSION
+#   ifdef __cpp_lib_syncbuf
+#     error "__cpp_lib_syncbuf should not be defined because it is unimplemented in libc++!"
+#   endif
 # endif
 
 # if !defined(_LIBCPP_VERSION)
 #   ifndef __cpp_lib_three_way_comparison
 #     error "__cpp_lib_three_way_comparison should be defined in c++20"
 #   endif
-#   if __cpp_lib_three_way_comparison != 201711L
-#     error "__cpp_lib_three_way_comparison should have the value 201711L in c++20"
+#   if __cpp_lib_three_way_comparison != 201907L
+#     error "__cpp_lib_three_way_comparison should have the value 201907L in c++20"
 #   endif
 # else // _LIBCPP_VERSION
 #   ifdef __cpp_lib_three_way_comparison
@@ -2414,6 +3120,13 @@
 #   endif
 # endif
 
+# ifndef __cpp_lib_to_address
+#   error "__cpp_lib_to_address should be defined in c++20"
+# endif
+# if __cpp_lib_to_address != 201711L
+#   error "__cpp_lib_to_address should have the value 201711L in c++20"
+# endif
+
 # ifndef __cpp_lib_to_array
 #   error "__cpp_lib_to_array should be defined in c++20"
 # endif
@@ -2483,6 +3196,13 @@
 #   error "__cpp_lib_unordered_map_try_emplace should have the value 201411L in c++20"
 # endif
 
+# ifndef __cpp_lib_unwrap_ref
+#   error "__cpp_lib_unwrap_ref should be defined in c++20"
+# endif
+# if __cpp_lib_unwrap_ref != 201811L
+#   error "__cpp_lib_unwrap_ref should have the value 201811L in c++20"
+# endif
+
 # ifndef __cpp_lib_variant
 #   error "__cpp_lib_variant should be defined in c++20"
 # endif

diff  --git a/libcxx/utils/generate_feature_test_macro_components.py b/libcxx/utils/generate_feature_test_macro_components.py
index 37d8a95dd9ae..28079cdae065 100755
--- a/libcxx/utils/generate_feature_test_macro_components.py
+++ b/libcxx/utils/generate_feature_test_macro_components.py
@@ -56,6 +56,11 @@ def add_version_header(tc):
     "name": "__cpp_lib_as_const",
     "values": { "c++17": 201510 },
     "headers": ["utility"],
+  }, {
+    "name": "__cpp_lib_assume_aligned",
+    "values": { "c++20": 201811 },
+    "headers": ["memory"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_atomic_flag_test",
     "values": { "c++20": 201907 },
@@ -108,9 +113,15 @@ def add_version_header(tc):
     "headers": ["atomic"],
     "depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
     "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
+  }, {
+    "name": "__cpp_lib_barrier",
+    "values": { "c++20": 201907 },
+    "headers": ["barrier"],
+    "depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
+    "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
   }, {
     "name": "__cpp_lib_bind_front",
-    "values": { "c++20": 201811 },
+    "values": { "c++20": 201907 },
     "headers": ["functional"],
     "unimplemented": True,
   }, {
@@ -118,10 +129,19 @@ def add_version_header(tc):
     "values": { "c++20": 201806 },
     "headers": ["bit"],
     "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_bitops",
+    "values": { "c++20": 201907 },
+    "headers": ["bit"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_bool_constant",
     "values": { "c++17": 201505 },
     "headers": ["type_traits"],
+  }, {
+    "name": "__cpp_lib_bounded_array_traits",
+    "values": { "c++20": 201902 },
+    "headers": ["type_traits"],
   }, {
     "name": "__cpp_lib_boyer_moore_searcher",
     "values": { "c++17": 201603 },
@@ -155,9 +175,19 @@ def add_version_header(tc):
     "headers": ["complex"],
   }, {
     "name": "__cpp_lib_concepts",
-    "values": { "c++20": 201806 },
+    "values": { "c++20": 202002 },
     "headers": ["concepts"],
     "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_constexpr_algorithms",
+    "values": { "c++20": 201806 },
+    "headers": ["algorithm"],
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_constexpr_complex",
+    "values": { "c++20": 201711 },
+    "headers": ["complex"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_constexpr_dynamic_alloc",
     "values": { "c++20": 201907 },
@@ -166,19 +196,50 @@ def add_version_header(tc):
     "name": "__cpp_lib_constexpr_functional",
     "values": { "c++20": 201907 },
     "headers": ["functional"],
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_constexpr_iterator",
+    "values": { "c++20": 201811 },
+    "headers": ["iterator"],
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_constexpr_memory",
+    "values": { "c++20": 201811 },
+    "headers": ["memory"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_constexpr_numeric",
     "values": { "c++20": 201911 },
     "headers": ["numeric"],
   }, {
-    "name": "__cpp_lib_constexpr_swap_algorithms",
-    "values": { "c++20": 201806 },
-    "headers": ["algorithm"],
+    "name": "__cpp_lib_constexpr_string",
+    "values": { "c++20": 201907 },
+    "headers": ["string"],
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_constexpr_string_view",
+    "values": { "c++20": 201811 },
+    "headers": ["string_view"],
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_constexpr_tuple",
+    "values": { "c++20": 201811 },
+    "headers": ["tuple"],
     "unimplemented": True,
   }, {
     "name": "__cpp_lib_constexpr_utility",
     "values": { "c++20": 201811 },
     "headers": ["utility"],
+  }, {
+    "name": "__cpp_lib_constexpr_vector",
+    "values": { "c++20": 201907 },
+    "headers": ["vector"],
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_coroutine",
+    "values": { "c++20": 201902 },
+    "headers": ["coroutine"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_destroying_delete",
     "values": { "c++20": 201806 },
@@ -203,7 +264,7 @@ def add_version_header(tc):
     "headers": ["utility"],
   }, {
     "name": "__cpp_lib_execution",
-    "values": { "c++17": 201603 },
+    "values": { "c++17": 201603, "c++20": 201902 },
     "headers": ["execution"],
     "unimplemented": True,
   }, {
@@ -245,6 +306,11 @@ def add_version_header(tc):
     "name": "__cpp_lib_int_pow2",
     "values": { "c++20": 202002 },
     "headers": ["bit"],
+  }, {
+    "name": "__cpp_lib_integer_comparison_functions",
+    "values": { "c++20": 202002 },
+    "headers": ["utility"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_integer_sequence",
     "values": { "c++14": 201304 },
@@ -256,7 +322,7 @@ def add_version_header(tc):
   }, {
     "name": "__cpp_lib_interpolate",
     "values": { "c++20": 201902 },
-    "headers": ["numeric"],
+    "headers": ["cmath", "numeric"],
   }, {
     "name": "__cpp_lib_invoke",
     "values": { "c++17": 201411 },
@@ -281,14 +347,41 @@ def add_version_header(tc):
     "name": "__cpp_lib_is_invocable",
     "values": { "c++17": 201703 },
     "headers": ["type_traits"],
+  }, {
+    "name": "__cpp_lib_is_layout_compatible",
+    "values": { "c++20": 201907 },
+    "headers": ["type_traits"],
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_is_nothrow_convertible",
+    "values": { "c++20": 201806 },
+    "headers": ["type_traits"],
   }, {
     "name": "__cpp_lib_is_null_pointer",
     "values": { "c++14": 201309 },
     "headers": ["type_traits"],
+  }, {
+    "name": "__cpp_lib_is_pointer_interconvertible",
+    "values": { "c++20": 201907 },
+    "headers": ["type_traits"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_is_swappable",
     "values": { "c++17": 201603 },
     "headers": ["type_traits"],
+  }, {
+    "name": "__cpp_lib_jthread",
+    "values": { "c++20": 201911 },
+    "headers": ["stop_token", "thread"],
+    "depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
+    "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_latch",
+    "values": { "c++20": 201907 },
+    "headers": ["latch"],
+    "depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
+    "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
   }, {
     "name": "__cpp_lib_launder",
     "values": { "c++17": 201606 },
@@ -358,6 +451,11 @@ def add_version_header(tc):
     "values": { "c++17": 201603 },
     "headers": ["algorithm", "numeric"],
     "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_polymorphic_allocator",
+    "values": { "c++20": 201902 },
+    "headers": ["memory"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_quoted_string_io",
     "values": { "c++14": 201304 },
@@ -371,6 +469,10 @@ def add_version_header(tc):
     "name": "__cpp_lib_raw_memory_algorithms",
     "values": { "c++17": 201606 },
     "headers": ["memory"],
+  }, {
+    "name": "__cpp_lib_remove_cvref",
+    "values": { "c++20": 201711 },
+    "headers": ["type_traits"],
   }, {
     "name": "__cpp_lib_result_of_sfinae",
     "values": { "c++14": 201210 },
@@ -387,6 +489,12 @@ def add_version_header(tc):
     "name": "__cpp_lib_scoped_lock",
     "values": { "c++17": 201703 },
     "headers": ["mutex"],
+  }, {
+    "name": "__cpp_lib_semaphore",
+    "values": { "c++20": 201907 },
+    "headers": ["semaphore"],
+    "depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
+    "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
   }, {
     "name": "__cpp_lib_shared_mutex",
     "values": { "c++17": 201505 },
@@ -407,23 +515,55 @@ def add_version_header(tc):
     "headers": ["shared_mutex"],
     "depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
     "internal_depends": "!defined(_LIBCPP_HAS_NO_THREADS)",
+  }, {
+    "name": "__cpp_lib_shift",
+    "values": { "c++20": 201806 },
+    "headers": ["algorithm"],
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_smart_ptr_for_overwrite",
+    "values": { "c++20": 202002 },
+    "headers": ["memory"],
+    "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_source_location",
+    "values": { "c++20": 201907 },
+    "headers": ["source_location"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_span",
     "values": { "c++20": 202002 },
     "headers": ["span"],
+  }, {
+    "name": "__cpp_lib_ssize",
+    "values": { "c++20": 201902 },
+    "headers": ["iterator"],
+  }, {
+    "name": "__cpp_lib_starts_ends_with",
+    "values": { "c++20": 201711 },
+    "headers": ["string", "string_view"],
   }, {
     "name": "__cpp_lib_string_udls",
     "values": { "c++14": 201304 },
     "headers": ["string"],
   }, {
     "name": "__cpp_lib_string_view",
-    "values": { "c++17": 201606 },
+    "values": { "c++17": 201606, "c++20": 201803 },
     "headers": ["string", "string_view"],
+  }, {
+    "name": "__cpp_lib_syncbuf",
+    "values": { "c++20": 201803 },
+    "headers": ["syncstream"],
+    "unimplemented": True,
   }, {
     "name": "__cpp_lib_three_way_comparison",
-    "values": { "c++20": 201711 },
+    "values": { "c++20": 201907 },
     "headers": ["compare"],
     "unimplemented": True,
+  }, {
+    "name": "__cpp_lib_to_address",
+    "values": { "c++20": 201711 },
+    "headers": ["memory"],
   }, {
     "name": "__cpp_lib_to_array",
     "values": { "c++20": 201907 },
@@ -440,7 +580,7 @@ def add_version_header(tc):
   }, {
     "name": "__cpp_lib_transparent_operators",
     "values": { "c++14": 201210, "c++17": 201510 },
-    "headers": ["functional"],
+    "headers": ["functional", "memory"],
   }, {
     "name": "__cpp_lib_tuple_element_t",
     "values": { "c++14": 201402 },
@@ -461,6 +601,10 @@ def add_version_header(tc):
     "name": "__cpp_lib_unordered_map_try_emplace",
     "values": { "c++17": 201411 },
     "headers": ["unordered_map"],
+  }, {
+    "name": "__cpp_lib_unwrap_ref",
+    "values": { "c++20": 201811 },
+    "headers": ["functional"],
   }, {
     "name": "__cpp_lib_variant",
     "values": { "c++17": 201606 },
@@ -483,13 +627,16 @@ def add_version_header(tc):
 # <thread> is a hard error in that case.
 lit_markup = {
   "atomic": ["UNSUPPORTED: libcpp-has-no-threads"],
-  "shared_mutex": ["UNSUPPORTED: libcpp-has-no-threads"],
-  "thread": ["UNSUPPORTED: libcpp-has-no-threads"],
+  "barrier": ["UNSUPPORTED: libcpp-has-no-threads"],
   "iomanip": ["UNSUPPORTED: libcpp-has-no-localization"],
   "istream": ["UNSUPPORTED: libcpp-has-no-localization"],
+  "latch": ["UNSUPPORTED: libcpp-has-no-threads"],
   "locale": ["UNSUPPORTED: libcpp-has-no-localization"],
   "ostream": ["UNSUPPORTED: libcpp-has-no-localization"],
   "regex": ["UNSUPPORTED: libcpp-has-no-localization"],
+  "semaphore": ["UNSUPPORTED: libcpp-has-no-threads"],
+  "shared_mutex": ["UNSUPPORTED: libcpp-has-no-threads"],
+  "thread": ["UNSUPPORTED: libcpp-has-no-threads"],
 }
 
 def get_std_dialects():


        


More information about the libcxx-commits mailing list