Author: Nikolas Klauser Date: 2025-06-21T09:58:49+02:00 New Revision: 7fd7f5272034a6bb5987660a8b764842c62d18d5
URL: https://github.com/llvm/llvm-project/commit/7fd7f5272034a6bb5987660a8b764842c62d18d5 DIFF: https://github.com/llvm/llvm-project/commit/7fd7f5272034a6bb5987660a8b764842c62d18d5.diff LOG: Revert "[libc++] Simplify <limits> a bit (#140021)" This reverts commit 685af55fe004b0d904c3de1c28fdebbeee15d0a4. Added: Modified: libcxx/include/__numeric/gcd_lcm.h libcxx/include/forward_list libcxx/include/limits Removed: ################################################################################ diff --git a/libcxx/include/__numeric/gcd_lcm.h b/libcxx/include/__numeric/gcd_lcm.h index 95df54dc066df..ce58f8698f726 100644 --- a/libcxx/include/__numeric/gcd_lcm.h +++ b/libcxx/include/__numeric/gcd_lcm.h @@ -10,6 +10,7 @@ #ifndef _LIBCPP___NUMERIC_GCD_LCM_H #define _LIBCPP___NUMERIC_GCD_LCM_H +#include <__algorithm/min.h> #include <__assert> #include <__bit/countr.h> #include <__config> @@ -19,7 +20,6 @@ #include <__type_traits/is_same.h> #include <__type_traits/is_signed.h> #include <__type_traits/make_unsigned.h> -#include <__type_traits/remove_cv.h> #include <limits> #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list index 6daa7fbbc03c2..bad0c11b7c7e2 100644 --- a/libcxx/include/forward_list +++ b/libcxx/include/forward_list @@ -233,7 +233,6 @@ template <class T, class Allocator, class Predicate> # include <__type_traits/is_pointer.h> # include <__type_traits/is_same.h> # include <__type_traits/is_swappable.h> -# include <__type_traits/remove_cv.h> # include <__type_traits/type_identity.h> # include <__utility/forward.h> # include <__utility/move.h> diff --git a/libcxx/include/limits b/libcxx/include/limits index 1205e6a0c2781..f5d16523763b4 100644 --- a/libcxx/include/limits +++ b/libcxx/include/limits @@ -108,6 +108,7 @@ template<> class numeric_limits<cv long double>; # include <__config> # include <__type_traits/is_arithmetic.h> # include <__type_traits/is_signed.h> +# include <__type_traits/remove_cv.h> # if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) # pragma GCC system_header @@ -177,6 +178,16 @@ protected: static _LIBCPP_CONSTEXPR const float_round_style round_style = round_toward_zero; }; +template <class _Tp, int __digits, bool _IsSigned> +struct __libcpp_compute_min { + static _LIBCPP_CONSTEXPR const _Tp value = _Tp(_Tp(1) << __digits); +}; + +template <class _Tp, int __digits> +struct __libcpp_compute_min<_Tp, __digits, false> { + static _LIBCPP_CONSTEXPR const _Tp value = _Tp(0); +}; + template <class _Tp> class __libcpp_numeric_limits<_Tp, true> { protected: @@ -188,7 +199,7 @@ protected: static _LIBCPP_CONSTEXPR const int digits = static_cast<int>(sizeof(type) * __CHAR_BIT__ - is_signed); static _LIBCPP_CONSTEXPR const int digits10 = digits * 3 / 10; static _LIBCPP_CONSTEXPR const int max_digits10 = 0; - static _LIBCPP_CONSTEXPR const type __min = is_signed ? _Tp(_Tp(1) << digits) : 0; + static _LIBCPP_CONSTEXPR const type __min = __libcpp_compute_min<type, digits, is_signed>::value; static _LIBCPP_CONSTEXPR const type __max = is_signed ? type(type(~0) ^ __min) : type(~0); [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __min; } [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __max; } @@ -239,8 +250,10 @@ protected: static _LIBCPP_CONSTEXPR const int digits = 1; static _LIBCPP_CONSTEXPR const int digits10 = 0; static _LIBCPP_CONSTEXPR const int max_digits10 = 0; - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return false; } - [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return true; } + static _LIBCPP_CONSTEXPR const type __min = false; + static _LIBCPP_CONSTEXPR const type __max = true; + [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __min; } + [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __max; } [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return min(); } static _LIBCPP_CONSTEXPR const bool is_integer = true; _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits