From 5a42e2bc2805601939200ed8c68938b03634367d Mon Sep 17 00:00:00 2001 From: Dominic Chen Date: Wed, 17 Aug 2022 10:37:24 -0700 Subject: [PATCH] Revert "[libcxx] Resolve warnings for Wshift-sign-overflow" This reverts commit 774c39313e83e8087776246c186593ea0c751fd5. --- libcxx/include/__chrono/duration.h | 2 +- libcxx/include/__memory/temporary_buffer.h | 5 ++-- libcxx/include/ratio | 30 +++++++++++----------- libcxx/utils/libcxx/test/params.py | 1 - 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/libcxx/include/__chrono/duration.h b/libcxx/include/__chrono/duration.h index 0f0e623af9e4..4345fffbc156 100644 --- a/libcxx/include/__chrono/duration.h +++ b/libcxx/include/__chrono/duration.h @@ -212,7 +212,7 @@ class _LIBCPP_TEMPLATE_VIS duration static const intmax_t __d1 = _R1::den / __gcd_d1_d2; static const intmax_t __n2 = _R2::num / __gcd_n1_n2; static const intmax_t __d2 = _R2::den / __gcd_d1_d2; - static const intmax_t max = numeric_limits::max(); + static const intmax_t max = -((intmax_t(1) << (sizeof(intmax_t) * CHAR_BIT - 1)) + 1); template struct __mul // __overflow == false diff --git a/libcxx/include/__memory/temporary_buffer.h b/libcxx/include/__memory/temporary_buffer.h index 0b44bc4b6c90..c917f041a014 100644 --- a/libcxx/include/__memory/temporary_buffer.h +++ b/libcxx/include/__memory/temporary_buffer.h @@ -14,7 +14,6 @@ #include <__type_traits/alignment_of.h> #include <__utility/pair.h> #include -#include #include #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) @@ -29,7 +28,9 @@ pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __n) _NOEXCEPT { pair<_Tp*, ptrdiff_t> __r(0, 0); - const ptrdiff_t __m = (~ptrdiff_t(0) ^ numeric_limits::min()) / sizeof(_Tp); + const ptrdiff_t __m = (~ptrdiff_t(0) ^ + ptrdiff_t(ptrdiff_t(1) << (sizeof(ptrdiff_t) * __CHAR_BIT__ - 1))) + / sizeof(_Tp); if (__n > __m) __n = __m; while (__n > 0) diff --git a/libcxx/include/ratio b/libcxx/include/ratio index 20e8e7f155b5..5d7af88a2ac8 100644 --- a/libcxx/include/ratio +++ b/libcxx/include/ratio @@ -79,8 +79,8 @@ typedef ratio<1000000000000000000000000, 1> yotta; // not supported #include <__assert> // all public C++ headers provide the assertion handler #include <__config> +#include #include -#include #include #include @@ -140,8 +140,8 @@ class __ll_add; template class __ll_add<_Xp, _Yp, 1> { - static const intmax_t min = numeric_limits::min() + 1; - static const intmax_t max = numeric_limits::max(); + static const intmax_t min = (1LL << (sizeof(intmax_t) * CHAR_BIT - 1)) + 1; + static const intmax_t max = -min; static_assert(_Xp <= max - _Yp, "overflow in __ll_add"); public: @@ -158,8 +158,8 @@ public: template class __ll_add<_Xp, _Yp, -1> { - static const intmax_t min = numeric_limits::min() + 1; - static const intmax_t max = numeric_limits::max(); + static const intmax_t min = (1LL << (sizeof(intmax_t) * CHAR_BIT - 1)) + 1; + static const intmax_t max = -min; static_assert(min - _Yp <= _Xp, "overflow in __ll_add"); public: @@ -172,8 +172,8 @@ class __ll_sub; template class __ll_sub<_Xp, _Yp, 1> { - static const intmax_t min = numeric_limits::min() + 1; - static const intmax_t max = numeric_limits::max(); + static const intmax_t min = (1LL << (sizeof(intmax_t) * CHAR_BIT - 1)) + 1; + static const intmax_t max = -min; static_assert(min + _Yp <= _Xp, "overflow in __ll_sub"); public: @@ -190,8 +190,8 @@ public: template class __ll_sub<_Xp, _Yp, -1> { - static const intmax_t min = numeric_limits::min() + 1; - static const intmax_t max = numeric_limits::max(); + static const intmax_t min = (1LL << (sizeof(intmax_t) * CHAR_BIT - 1)) + 1; + static const intmax_t max = -min; static_assert(_Xp <= max + _Yp, "overflow in __ll_sub"); public: @@ -201,9 +201,9 @@ public: template class __ll_mul { - static const intmax_t nan = numeric_limits::min(); - static const intmax_t min = numeric_limits::min() + 1; - static const intmax_t max = numeric_limits::max(); + static const intmax_t nan = (1LL << (sizeof(intmax_t) * CHAR_BIT - 1)); + static const intmax_t min = nan + 1; + static const intmax_t max = -min; static const intmax_t __a_x = __static_abs<_Xp>::value; static const intmax_t __a_y = __static_abs<_Yp>::value; @@ -237,9 +237,9 @@ public: template class __ll_div { - static const intmax_t nan = numeric_limits::min(); - static const intmax_t min = numeric_limits::min() + 1; - static const intmax_t max = numeric_limits::max(); + static const intmax_t nan = (1LL << (sizeof(intmax_t) * CHAR_BIT - 1)); + static const intmax_t min = nan + 1; + static const intmax_t max = -min; static_assert(_Xp != nan && _Yp != nan && _Yp != 0, "overflow in __ll_div"); public: diff --git a/libcxx/utils/libcxx/test/params.py b/libcxx/utils/libcxx/test/params.py index ebfbd13d815d..c46b55d0c6b3 100644 --- a/libcxx/utils/libcxx/test/params.py +++ b/libcxx/utils/libcxx/test/params.py @@ -15,7 +15,6 @@ _warningFlags = [ '-Wall', '-Wextra', '-Wshadow', - '-Wshift-sign-overflow', '-Wundef', '-Wno-unused-command-line-argument', '-Wno-attributes',