[llvm-branch-commits] [libcxx] 7fd7f52 - Revert "[libc++] Simplify <limits> a bit (#140021)"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Jun 21 00:58:52 PDT 2025
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;
More information about the llvm-branch-commits
mailing list