diff options
Diffstat (limited to 'libcxx/include')
| -rw-r--r-- | libcxx/include/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | libcxx/include/__config | 11 | ||||
| -rw-r--r-- | libcxx/include/__configuration/abi.h | 8 | ||||
| -rw-r--r-- | libcxx/include/__configuration/compiler.h | 12 | ||||
| -rw-r--r-- | libcxx/include/__format/format_arg.h | 17 | ||||
| -rw-r--r-- | libcxx/include/__format/format_context.h | 4 | ||||
| -rw-r--r-- | libcxx/include/__hash_table | 12 | ||||
| -rw-r--r-- | libcxx/include/__iterator/concepts.h | 15 | ||||
| -rw-r--r-- | libcxx/include/__locale_dir/locale_base_api.h | 2 | ||||
| -rw-r--r-- | libcxx/include/__locale_dir/support/bsd_like.h | 4 | ||||
| -rw-r--r-- | libcxx/include/__locale_dir/support/netbsd.h | 20 | ||||
| -rw-r--r-- | libcxx/include/__math/traits.h | 15 | ||||
| -rw-r--r-- | libcxx/include/__memory/construct_at.h | 31 | ||||
| -rw-r--r-- | libcxx/include/__ranges/transform_view.h | 3 | ||||
| -rw-r--r-- | libcxx/include/__tree | 12 | ||||
| -rw-r--r-- | libcxx/include/__type_traits/reference_constructs_from_temporary.h | 6 | ||||
| -rw-r--r-- | libcxx/include/forward_list | 11 | ||||
| -rw-r--r-- | libcxx/include/list | 11 | ||||
| -rw-r--r-- | libcxx/include/module.modulemap.in | 1 | ||||
| -rw-r--r-- | libcxx/include/tuple | 4 | ||||
| -rw-r--r-- | libcxx/include/variant | 2 | 
21 files changed, 67 insertions, 135 deletions
| diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt index 37259a7..de9819c 100644 --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -529,6 +529,7 @@ set(files    __locale_dir/support/freebsd.h    __locale_dir/support/fuchsia.h    __locale_dir/support/linux.h +  __locale_dir/support/netbsd.h    __locale_dir/support/no_locale/characters.h    __locale_dir/support/no_locale/strtonum.h    __locale_dir/support/windows.h diff --git a/libcxx/include/__config b/libcxx/include/__config index b4c081d..357f77b 100644 --- a/libcxx/include/__config +++ b/libcxx/include/__config @@ -1050,8 +1050,7 @@ typedef __char32_t char32_t;  #    define _LIBCPP_CTAD_SUPPORTED_FOR_TYPE(_ClassName) static_assert(true, "")  #  endif -// TODO(LLVM 22): Remove the workaround -#  if defined(__OBJC__) && (!defined(_LIBCPP_CLANG_VER) || _LIBCPP_CLANG_VER < 2001) +#  if defined(__OBJC__) && defined(_LIBCPP_APPLE_CLANG_VER)  #    define _LIBCPP_WORKAROUND_OBJCXX_COMPILER_INTRINSICS  #  endif @@ -1255,14 +1254,6 @@ typedef __char32_t char32_t;  #    define _LIBCPP_DIAGNOSE_NULLPTR  #  endif -// TODO(LLVM 22): Remove this macro once LLVM19 support ends. __cpp_explicit_this_parameter has been set in LLVM20. -// Clang-18 has support for deducing this, but it does not set the FTM. -#  if defined(__cpp_explicit_this_parameter) || (defined(_LIBCPP_CLANG_VER) && _LIBCPP_CLANG_VER >= 1800) -#    define _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER 1 -#  else -#    define _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER 0 -#  endif -  #endif // __cplusplus  #endif // _LIBCPP___CONFIG diff --git a/libcxx/include/__configuration/abi.h b/libcxx/include/__configuration/abi.h index c9936df..38b85c6 100644 --- a/libcxx/include/__configuration/abi.h +++ b/libcxx/include/__configuration/abi.h @@ -61,14 +61,6 @@  // According to the Standard, `bitset::operator[] const` returns bool  #  define _LIBCPP_ABI_BITSET_VECTOR_BOOL_CONST_SUBSCRIPT_RETURN_BOOL -// In LLVM 20, we've changed to take these ABI breaks unconditionally. These flags only exist in case someone is running -// into the static_asserts we added to catch the ABI break and don't care that it is one. -// TODO(LLVM 22): Remove these flags -#  define _LIBCPP_ABI_LIST_REMOVE_NODE_POINTER_UB -#  define _LIBCPP_ABI_TREE_REMOVE_NODE_POINTER_UB -#  define _LIBCPP_ABI_FIX_UNORDERED_NODE_POINTER_UB -#  define _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB -  // These flags are documented in ABIGuarantees.rst  #  define _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT  #  define _LIBCPP_ABI_DO_NOT_EXPORT_BASIC_STRING_COMMON diff --git a/libcxx/include/__configuration/compiler.h b/libcxx/include/__configuration/compiler.h index 11c07ed..7cd81e0 100644 --- a/libcxx/include/__configuration/compiler.h +++ b/libcxx/include/__configuration/compiler.h @@ -33,16 +33,16 @@  // Warn if a compiler version is used that is not supported anymore  // LLVM RELEASE Update the minimum compiler versions  #  if defined(_LIBCPP_CLANG_VER) -#    if _LIBCPP_CLANG_VER < 1900 -#      warning "Libc++ only supports Clang 19 and later" +#    if _LIBCPP_CLANG_VER < 2001 +#      warning "Libc++ only supports Clang 20 and later"  #    endif  #  elif defined(_LIBCPP_APPLE_CLANG_VER) -#    if _LIBCPP_APPLE_CLANG_VER < 1600 -#      warning "Libc++ only supports AppleClang 15 and later" +#    if _LIBCPP_APPLE_CLANG_VER < 1700 +#      warning "Libc++ only supports AppleClang 26 and later"  #    endif  #  elif defined(_LIBCPP_GCC_VER) -#    if _LIBCPP_GCC_VER < 1400 -#      warning "Libc++ only supports GCC 14 and later" +#    if _LIBCPP_GCC_VER < 1500 +#      warning "Libc++ only supports GCC 15 and later"  #    endif  #  endif diff --git a/libcxx/include/__format/format_arg.h b/libcxx/include/__format/format_arg.h index ed5e762..19794f0 100644 --- a/libcxx/include/__format/format_arg.h +++ b/libcxx/include/__format/format_arg.h @@ -149,7 +149,7 @@ _LIBCPP_HIDE_FROM_ABI decltype(auto) __visit_format_arg(_Visitor&& __vis, basic_    __libcpp_unreachable();  } -#  if _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER +#  if _LIBCPP_STD_VER >= 26  template <class _Rp, class _Visitor, class _Context>  _LIBCPP_HIDE_FROM_ABI _Rp __visit_format_arg(_Visitor&& __vis, basic_format_arg<_Context> __arg) { @@ -200,7 +200,7 @@ _LIBCPP_HIDE_FROM_ABI _Rp __visit_format_arg(_Visitor&& __vis, basic_format_arg<    __libcpp_unreachable();  } -#  endif // _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER +#  endif // _LIBCPP_STD_VER >= 26  /// Contains the values used in basic_format_arg.  /// @@ -285,7 +285,7 @@ public:    _LIBCPP_HIDE_FROM_ABI explicit operator bool() const noexcept { return __type_ != __format::__arg_t::__none; } -#  if _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER +#  if _LIBCPP_STD_VER >= 26    // This function is user facing, so it must wrap the non-standard types of    // the "variant" in a handle to stay conforming. See __arg_t for more details. @@ -329,7 +329,7 @@ public:      }    } -#  endif // _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER +#  endif // _LIBCPP_STD_VER >= 26  private:    using char_type = typename _Context::char_type; @@ -371,11 +371,8 @@ private:  // This function is user facing, so it must wrap the non-standard types of  // the "variant" in a handle to stay conforming. See __arg_t for more details.  template <class _Visitor, class _Context> -#  if _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER -_LIBCPP_DEPRECATED_IN_CXX26 -#  endif -    _LIBCPP_HIDE_FROM_ABI decltype(auto) -    visit_format_arg(_Visitor&& __vis, basic_format_arg<_Context> __arg) { +_LIBCPP_DEPRECATED_IN_CXX26 _LIBCPP_HIDE_FROM_ABI decltype(auto) +visit_format_arg(_Visitor&& __vis, basic_format_arg<_Context> __arg) {    switch (__arg.__type_) {  #  if _LIBCPP_HAS_INT128    case __format::__arg_t::__i128: { @@ -387,7 +384,7 @@ _LIBCPP_DEPRECATED_IN_CXX26      typename __basic_format_arg_value<_Context>::__handle __h{__arg.__value_.__u128_};      return std::invoke(std::forward<_Visitor>(__vis), typename basic_format_arg<_Context>::handle{__h});    } -#  endif // _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER +#  endif // _LIBCPP_HAS_INT128    default:      return std::__visit_format_arg(std::forward<_Visitor>(__vis), __arg);    } diff --git a/libcxx/include/__format/format_context.h b/libcxx/include/__format/format_context.h index e672ee7..1771dd3 100644 --- a/libcxx/include/__format/format_context.h +++ b/libcxx/include/__format/format_context.h @@ -175,13 +175,13 @@ public:                    __format::__determine_arg_t<basic_format_context, decltype(__arg)>(),                    __basic_format_arg_value<basic_format_context>(__arg)};            }; -#  if _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER +#  if _LIBCPP_STD_VER >= 26            return static_cast<_Context*>(__c)->arg(__id).visit(std::move(__visitor));  #  else            _LIBCPP_SUPPRESS_DEPRECATED_PUSH            return std::visit_format_arg(std::move(__visitor), static_cast<_Context*>(__c)->arg(__id));            _LIBCPP_SUPPRESS_DEPRECATED_POP -#  endif // _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER +#  endif // _LIBCPP_STD_VER >= 26          }) {    } diff --git a/libcxx/include/__hash_table b/libcxx/include/__hash_table index 5432abb..e189794 100644 --- a/libcxx/include/__hash_table +++ b/libcxx/include/__hash_table @@ -83,18 +83,6 @@ struct __hash_node_base {    typedef _NodePtr __node_pointer;    typedef __node_base_pointer __next_pointer; -// TODO(LLVM 22): Remove this check -#ifndef _LIBCPP_ABI_FIX_UNORDERED_NODE_POINTER_UB -  static_assert(sizeof(__node_base_pointer) == sizeof(__node_pointer) && _LIBCPP_ALIGNOF(__node_base_pointer) == -                    _LIBCPP_ALIGNOF(__node_pointer), -                "It looks like you are using std::__hash_table (an implementation detail for the unordered containers) " -                "with a fancy pointer type that thas a different representation depending on whether it points to a " -                "__hash_table base pointer or a __hash_table node pointer (both of which are implementation details of " -                "the standard library). This means that your ABI is being broken between LLVM 19 and LLVM 20. If you " -                "don't care about your ABI being broken, define the _LIBCPP_ABI_TREE_REMOVE_NODE_POINTER_UB macro to " -                "silence this diagnostic."); -#endif -    __next_pointer __next_;    _LIBCPP_HIDE_FROM_ABI __next_pointer __ptr() _NOEXCEPT { diff --git a/libcxx/include/__iterator/concepts.h b/libcxx/include/__iterator/concepts.h index f386887..3b43920 100644 --- a/libcxx/include/__iterator/concepts.h +++ b/libcxx/include/__iterator/concepts.h @@ -117,15 +117,12 @@ template <class _Tp>  concept __signed_integer_like = signed_integral<_Tp>;  template <class _Ip> -concept weakly_incrementable = -    // TODO: remove this once the clang bug is fixed (https://llvm.org/PR48173). -    !same_as<_Ip, bool> && // Currently, clang does not handle bool correctly. -    movable<_Ip> && requires(_Ip __i) { -      typename iter_difference_t<_Ip>; -      requires __signed_integer_like<iter_difference_t<_Ip>>; -      { ++__i } -> same_as<_Ip&>; // not required to be equality-preserving -      __i++;                      // not required to be equality-preserving -    }; +concept weakly_incrementable = movable<_Ip> && requires(_Ip __i) { +  typename iter_difference_t<_Ip>; +  requires __signed_integer_like<iter_difference_t<_Ip>>; +  { ++__i } -> same_as<_Ip&>; // not required to be equality-preserving +  __i++;                      // not required to be equality-preserving +};  // [iterator.concept.inc]  template <class _Ip> diff --git a/libcxx/include/__locale_dir/locale_base_api.h b/libcxx/include/__locale_dir/locale_base_api.h index 9f3ce02..8c8f000 100644 --- a/libcxx/include/__locale_dir/locale_base_api.h +++ b/libcxx/include/__locale_dir/locale_base_api.h @@ -115,6 +115,8 @@  #    include <__locale_dir/support/apple.h>  #  elif defined(__FreeBSD__)  #    include <__locale_dir/support/freebsd.h> +#  elif defined(__NetBSD__) +#    include <__locale_dir/support/netbsd.h>  #  elif defined(_LIBCPP_MSVCRT_LIKE)  #    include <__locale_dir/support/windows.h>  #  elif defined(__Fuchsia__) diff --git a/libcxx/include/__locale_dir/support/bsd_like.h b/libcxx/include/__locale_dir/support/bsd_like.h index ac40292..9d4bdd1 100644 --- a/libcxx/include/__locale_dir/support/bsd_like.h +++ b/libcxx/include/__locale_dir/support/bsd_like.h @@ -24,7 +24,9 @@  #  include <wctype.h>  #endif -#include <xlocale.h> +#if __has_include(<xlocale.h>) +#  include <xlocale.h> +#endif  #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)  #  pragma GCC system_header diff --git a/libcxx/include/__locale_dir/support/netbsd.h b/libcxx/include/__locale_dir/support/netbsd.h new file mode 100644 index 0000000..190857f --- /dev/null +++ b/libcxx/include/__locale_dir/support/netbsd.h @@ -0,0 +1,20 @@ +//===-----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP___LOCALE_DIR_SUPPORT_NETBSD_H +#define _LIBCPP___LOCALE_DIR_SUPPORT_NETBSD_H + +#include <__config> + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +#  pragma GCC system_header +#endif + +#include <__locale_dir/support/bsd_like.h> + +#endif // _LIBCPP___LOCALE_DIR_SUPPORT_NETBSD_H diff --git a/libcxx/include/__math/traits.h b/libcxx/include/__math/traits.h index 00db2a8..ff22cee 100644 --- a/libcxx/include/__math/traits.h +++ b/libcxx/include/__math/traits.h @@ -25,33 +25,26 @@ namespace __math {  // signbit -// TODO(LLVM 22): Remove conditional once support for Clang 19 is dropped. -#if defined(_LIBCPP_COMPILER_GCC) || __has_constexpr_builtin(__builtin_signbit) -#  define _LIBCPP_SIGNBIT_CONSTEXPR _LIBCPP_CONSTEXPR_SINCE_CXX23 -#else -#  define _LIBCPP_SIGNBIT_CONSTEXPR -#endif -  // The universal C runtime (UCRT) in the WinSDK provides floating point overloads  // for std::signbit(). By defining our overloads as templates, we can work around  // this issue as templates are less preferred than non-template functions.  template <class = void> -[[__nodiscard__]] inline _LIBCPP_SIGNBIT_CONSTEXPR _LIBCPP_HIDE_FROM_ABI bool signbit(float __x) _NOEXCEPT { +[[__nodiscard__]] inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool signbit(float __x) _NOEXCEPT {    return __builtin_signbit(__x);  }  template <class = void> -[[__nodiscard__]] inline _LIBCPP_SIGNBIT_CONSTEXPR _LIBCPP_HIDE_FROM_ABI bool signbit(double __x) _NOEXCEPT { +[[__nodiscard__]] inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool signbit(double __x) _NOEXCEPT {    return __builtin_signbit(__x);  }  template <class = void> -[[__nodiscard__]] inline _LIBCPP_SIGNBIT_CONSTEXPR _LIBCPP_HIDE_FROM_ABI bool signbit(long double __x) _NOEXCEPT { +[[__nodiscard__]] inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool signbit(long double __x) _NOEXCEPT {    return __builtin_signbit(__x);  }  template <class _A1, __enable_if_t<is_integral<_A1>::value, int> = 0> -[[__nodiscard__]] inline _LIBCPP_SIGNBIT_CONSTEXPR _LIBCPP_HIDE_FROM_ABI bool signbit(_A1 __x) _NOEXCEPT { +[[__nodiscard__]] inline _LIBCPP_CONSTEXPR_SINCE_CXX23 _LIBCPP_HIDE_FROM_ABI bool signbit(_A1 __x) _NOEXCEPT {    return __x < 0;  } diff --git a/libcxx/include/__memory/construct_at.h b/libcxx/include/__memory/construct_at.h index 6582691..5378c03 100644 --- a/libcxx/include/__memory/construct_at.h +++ b/libcxx/include/__memory/construct_at.h @@ -14,7 +14,6 @@  #include <__config>  #include <__memory/addressof.h>  #include <__new/placement_new_delete.h> -#include <__type_traits/enable_if.h>  #include <__type_traits/is_array.h>  #include <__utility/declval.h>  #include <__utility/forward.h> @@ -55,35 +54,25 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _Tp* __construct_at(_Tp* __l  // The internal functions are available regardless of the language version (with the exception of the `__destroy_at`  // taking an array). -template <class _Tp, __enable_if_t<!is_array<_Tp>::value, int> = 0> +template <class _Tp>  _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void __destroy_at(_Tp* __loc) {    _LIBCPP_ASSERT_NON_NULL(__loc != nullptr, "null pointer given to destroy_at"); -  __loc->~_Tp(); -} -  #if _LIBCPP_STD_VER >= 20 -template <class _Tp, __enable_if_t<is_array<_Tp>::value, int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr void __destroy_at(_Tp* __loc) { -  _LIBCPP_ASSERT_NON_NULL(__loc != nullptr, "null pointer given to destroy_at"); -  for (auto&& __val : *__loc) -    std::__destroy_at(std::addressof(__val)); -} +  if constexpr (is_array_v<_Tp>) { +    for (auto&& __val : *__loc) +      std::__destroy_at(std::addressof(__val)); +  } else  #endif +  { +    __loc->~_Tp(); +  } +}  #if _LIBCPP_STD_VER >= 17 - -template <class _Tp, enable_if_t<!is_array_v<_Tp>, int> = 0> +template <class _Tp>  _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void destroy_at(_Tp* _LIBCPP_DIAGNOSE_NULLPTR __loc) {    std::__destroy_at(__loc);  } - -#  if _LIBCPP_STD_VER >= 20 -template <class _Tp, enable_if_t<is_array_v<_Tp>, int> = 0> -_LIBCPP_HIDE_FROM_ABI constexpr void destroy_at(_Tp* _LIBCPP_DIAGNOSE_NULLPTR __loc) { -  std::__destroy_at(__loc); -} -#  endif -  #endif // _LIBCPP_STD_VER >= 17  _LIBCPP_END_NAMESPACE_STD diff --git a/libcxx/include/__ranges/transform_view.h b/libcxx/include/__ranges/transform_view.h index ae85dfa..ab1adf9 100644 --- a/libcxx/include/__ranges/transform_view.h +++ b/libcxx/include/__ranges/transform_view.h @@ -13,7 +13,6 @@  #include <__compare/three_way_comparable.h>  #include <__concepts/constructible.h>  #include <__concepts/convertible_to.h> -#include <__concepts/copyable.h>  #include <__concepts/derived_from.h>  #include <__concepts/equality_comparable.h>  #include <__concepts/invocable.h> @@ -64,7 +63,7 @@ concept __regular_invocable_with_range_ref = regular_invocable<_Fn, range_refere  template <class _View, class _Fn>  concept __transform_view_constraints =      view<_View> && is_object_v<_Fn> && regular_invocable<_Fn&, range_reference_t<_View>> && -    __is_referenceable_v<invoke_result_t<_Fn&, range_reference_t<_View>>>; +    __referenceable<invoke_result_t<_Fn&, range_reference_t<_View>>>;  #  if _LIBCPP_STD_VER >= 23  template <input_range _View, move_constructible _Fn> diff --git a/libcxx/include/__tree b/libcxx/include/__tree index 0738c8c..6947969 100644 --- a/libcxx/include/__tree +++ b/libcxx/include/__tree @@ -823,18 +823,6 @@ public:    using __node_allocator _LIBCPP_NODEBUG = __rebind_alloc<__alloc_traits, __node>;    using __node_traits _LIBCPP_NODEBUG    = allocator_traits<__node_allocator>; -// TODO(LLVM 22): Remove this check -#ifndef _LIBCPP_ABI_TREE_REMOVE_NODE_POINTER_UB -  static_assert(sizeof(__node_base_pointer) == sizeof(__end_node_pointer) && _LIBCPP_ALIGNOF(__node_base_pointer) == -                    _LIBCPP_ALIGNOF(__end_node_pointer), -                "It looks like you are using std::__tree (an implementation detail for (multi)map/set) with a fancy " -                "pointer type that thas a different representation depending on whether it points to a __tree base " -                "pointer or a __tree node pointer (both of which are implementation details of the standard library). " -                "This means that your ABI is being broken between LLVM 19 and LLVM 20. If you don't care about your " -                "ABI being broken, define the _LIBCPP_ABI_TREE_REMOVE_NODE_POINTER_UB macro to silence this " -                "diagnostic."); -#endif -  private:    // check for sane allocator pointer rebinding semantics. Rebinding the    // allocator for a new pointer type should be exactly the same as rebinding diff --git a/libcxx/include/__type_traits/reference_constructs_from_temporary.h b/libcxx/include/__type_traits/reference_constructs_from_temporary.h index 2ff549b..3d097ce 100644 --- a/libcxx/include/__type_traits/reference_constructs_from_temporary.h +++ b/libcxx/include/__type_traits/reference_constructs_from_temporary.h @@ -30,14 +30,8 @@ _LIBCPP_NO_SPECIALIZATIONS inline constexpr bool reference_constructs_from_tempo  #endif -#if __has_builtin(__reference_constructs_from_temporary)  template <class _Tp, class _Up>  inline const bool __reference_constructs_from_temporary_v = __reference_constructs_from_temporary(_Tp, _Up); -#else -// TODO(LLVM 22): Remove this as all supported compilers should have __reference_constructs_from_temporary implemented. -template <class _Tp, class _Up> -inline const bool __reference_constructs_from_temporary_v = __reference_binds_to_temporary(_Tp, _Up); -#endif  _LIBCPP_END_NAMESPACE_STD diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index df7da20..88d863f 100644 --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -284,17 +284,6 @@ struct __forward_node_traits {    typedef _NodePtr __node_pointer;    typedef __forward_begin_node<_NodePtr> __begin_node;    typedef __rebind_pointer_t<_NodePtr, __begin_node> __begin_node_pointer; - -// TODO(LLVM 22): Remove this check -#  ifndef _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB -  static_assert(sizeof(__begin_node_pointer) == sizeof(__node_pointer) && _LIBCPP_ALIGNOF(__begin_node_pointer) == -                    _LIBCPP_ALIGNOF(__node_pointer), -                "It looks like you are using std::forward_list with a fancy pointer type that thas a different " -                "representation depending on whether it points to a forward_list base pointer or a forward_list node " -                "pointer (both of which are implementation details of the standard library). This means that your ABI " -                "is being broken between LLVM 19 and LLVM 20. If you don't care about your ABI being broken, define " -                "the _LIBCPP_ABI_FORWARD_LIST_REMOVE_NODE_POINTER_UB macro to silence this diagnostic."); -#  endif  };  template <class _NodePtr> diff --git a/libcxx/include/list b/libcxx/include/list index c5c2a85..0ff85d2 100644 --- a/libcxx/include/list +++ b/libcxx/include/list @@ -276,17 +276,6 @@ template <class _Tp, class _VoidPtr>  struct __list_node_pointer_traits {    typedef __rebind_pointer_t<_VoidPtr, __list_node<_Tp, _VoidPtr> > __node_pointer;    typedef __rebind_pointer_t<_VoidPtr, __list_node_base<_Tp, _VoidPtr> > __base_pointer; - -// TODO(LLVM 22): Remove this check -#  ifndef _LIBCPP_ABI_LIST_REMOVE_NODE_POINTER_UB -  static_assert(sizeof(__node_pointer) == sizeof(__node_pointer) && _LIBCPP_ALIGNOF(__base_pointer) == -                    _LIBCPP_ALIGNOF(__node_pointer), -                "It looks like you are using std::list with a fancy pointer type that thas a different representation " -                "depending on whether it points to a list base pointer or a list node pointer (both of which are " -                "implementation details of the standard library). This means that your ABI is being broken between " -                "LLVM 19 and LLVM 20. If you don't care about your ABI being broken, define the " -                "_LIBCPP_ABI_LIST_REMOVE_NODE_POINTER_UB macro to silence this diagnostic."); -#  endif  };  template <class _Tp, class _VoidPtr> diff --git a/libcxx/include/module.modulemap.in b/libcxx/include/module.modulemap.in index a86d6c6..11ab61d 100644 --- a/libcxx/include/module.modulemap.in +++ b/libcxx/include/module.modulemap.in @@ -1587,6 +1587,7 @@ module std [system] {        textual header "__locale_dir/support/freebsd.h"        textual header "__locale_dir/support/fuchsia.h"        textual header "__locale_dir/support/linux.h" +      textual header "__locale_dir/support/netbsd.h"        textual header "__locale_dir/support/no_locale/characters.h"        textual header "__locale_dir/support/no_locale/strtonum.h"        textual header "__locale_dir/support/windows.h" diff --git a/libcxx/include/tuple b/libcxx/include/tuple index 5f3bb72..466f501 100644 --- a/libcxx/include/tuple +++ b/libcxx/include/tuple @@ -301,7 +301,7 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 bool __tuple_compare_equal(c  template <class _Tp, class _Up, class _IndexSeq = make_index_sequence<tuple_size_v<_Tp>>>  inline constexpr bool __can_tuple_compare_equal = false; -// TODO(LLVM 22): Remove `tuple_size_v<_Tp> == tuple_size_v<_Up>` here once once LLVM-20 support ends +// TODO(LLVM 23): Remove `tuple_size_v<_Tp> == tuple_size_v<_Up>` here once once LLVM-20 support ends  // because the resolution of CWG2369 landed in LLVM-21.  template <class _Tp, class _Up, size_t... _Is>    requires(tuple_size_v<_Tp> == tuple_size_v<_Up>) @@ -328,7 +328,7 @@ concept __tuple_like_no_tuple = __tuple_like<_Tp> && !__is_tuple_v<_Tp>;  template <class _Tp, class _Up, class _IndexSeq>  struct __tuple_common_comparison_category_impl {}; -// TODO(LLVM 22): Remove `tuple_size_v<_Tp> == tuple_size_v<_Up>` here once once LLVM-20 support ends +// TODO(LLVM 23): Remove `tuple_size_v<_Tp> == tuple_size_v<_Up>` here once once LLVM-20 support ends  // because the resolution of CWG2369 landed in LLVM-21.  template <class _Tp, class _Up, size_t... _Is>    requires(tuple_size_v<_Tp> == tuple_size_v<_Up>) && requires { diff --git a/libcxx/include/variant b/libcxx/include/variant index 9beef14..8e95858 100644 --- a/libcxx/include/variant +++ b/libcxx/include/variant @@ -1299,7 +1299,7 @@ public:      __impl_.__swap(__that.__impl_);    } -#    if _LIBCPP_STD_VER >= 26 && _LIBCPP_HAS_EXPLICIT_THIS_PARAMETER +#    if _LIBCPP_STD_VER >= 26    // Helper class to implement [variant.visit]/10    //   Constraints: The call to visit does not use an explicit template-argument-list    //   that begins with a type template-argument. | 
