diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-09-19 11:52:49 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-09-19 11:52:49 +0000 |
commit | 12bfa8bd29310b40e114f4965d9139e1015ae1df (patch) | |
tree | 9edaaa5972438ced6926287d2953ef5efb0c0a91 /libstdc++-v3/include/std/limits | |
parent | 7deb61cd7fdf23c235cd540ad200fb6bb5e77527 (diff) | |
download | gcc-12bfa8bd29310b40e114f4965d9139e1015ae1df.zip gcc-12bfa8bd29310b40e114f4965d9139e1015ae1df.tar.gz gcc-12bfa8bd29310b40e114f4965d9139e1015ae1df.tar.bz2 |
re PR libstdc++/40856 (numeric_limits not specialized for __int128_t or __uint128_t)
2011-09-19 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/40856
* include/std/limits (numeric_limits<__int128_t>,
numeric_limits<__uint128_t>): Add.
* src/limits.cc:Define.
* config/abi/pre/gnu.ver: Export.
* include/ext/typelist.h (_GLIBCXX_TYPELIST_CHAIN16, 20): Add.
* testsuite/util/testsuite_common_types.h (integral_types_gnu): Add
(limits_tl): Use it.
* testsuite/18_support/numeric_limits/requirements/
constexpr_functions.cc: Likewise.
* testsuite/18_support/numeric_limits/40856.cc: New.
* testsuite/18_support/numeric_limits/dr559.cc: Extend.
* testsuite/18_support/numeric_limits/lowest.cc: Likewise.
* testsuite/18_support/numeric_limits/max_digits10.cc: Likewise.
* testsuite/29_atomics/atomic/cons/assign_neg.cc: Adjust dg-error
line numbers.
* testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
* testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Likewise.
* testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
* testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc:
Likewise.
* testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc:
Likewise.
* testsuite/29_atomics/atomic_integral/operators/increment_neg.cc:
Likewise.
From-SVN: r178969
Diffstat (limited to 'libstdc++-v3/include/std/limits')
-rw-r--r-- | libstdc++-v3/include/std/limits | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/libstdc++-v3/include/std/limits b/libstdc++-v3/include/std/limits index 907df6b..fe6ee3d 100644 --- a/libstdc++-v3/include/std/limits +++ b/libstdc++-v3/include/std/limits @@ -1399,6 +1399,155 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION = round_toward_zero; }; +#if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128) + /// numeric_limits<__int128_t> specialization. + template<> + struct numeric_limits<__int128_t> + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR __int128_t + min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (__int128_t); } + + static _GLIBCXX_CONSTEXPR __int128_t + max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__int128_t); } + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + static constexpr __int128_t + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (__int128_t); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (__int128_t); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = true; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR __int128_t + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR __int128_t + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR __int128_t + infinity() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__int128_t>(0); } + + static _GLIBCXX_CONSTEXPR __int128_t + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__int128_t>(0); } + + static _GLIBCXX_CONSTEXPR __int128_t + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__int128_t>(0); } + + static _GLIBCXX_CONSTEXPR __int128_t + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__int128_t>(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; + + static _GLIBCXX_USE_CONSTEXPR bool traps + = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; + + /// numeric_limits<__uint128_t> specialization. + template<> + struct numeric_limits<__uint128_t> + { + static _GLIBCXX_USE_CONSTEXPR bool is_specialized = true; + + static _GLIBCXX_CONSTEXPR __uint128_t + min() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR __uint128_t + max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (__uint128_t); } + +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + static constexpr __uint128_t + lowest() noexcept { return min(); } +#endif + + static _GLIBCXX_USE_CONSTEXPR int digits + = __glibcxx_digits (__uint128_t); + static _GLIBCXX_USE_CONSTEXPR int digits10 + = __glibcxx_digits10 (__uint128_t); +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + static constexpr int max_digits10 = 0; +#endif + static _GLIBCXX_USE_CONSTEXPR bool is_signed = false; + static _GLIBCXX_USE_CONSTEXPR bool is_integer = true; + static _GLIBCXX_USE_CONSTEXPR bool is_exact = true; + static _GLIBCXX_USE_CONSTEXPR int radix = 2; + + static _GLIBCXX_CONSTEXPR __uint128_t + epsilon() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_CONSTEXPR __uint128_t + round_error() _GLIBCXX_USE_NOEXCEPT { return 0; } + + static _GLIBCXX_USE_CONSTEXPR int min_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int min_exponent10 = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent = 0; + static _GLIBCXX_USE_CONSTEXPR int max_exponent10 = 0; + + static _GLIBCXX_USE_CONSTEXPR bool has_infinity = false; + static _GLIBCXX_USE_CONSTEXPR bool has_quiet_NaN = false; + static _GLIBCXX_USE_CONSTEXPR bool has_signaling_NaN = false; + static _GLIBCXX_USE_CONSTEXPR float_denorm_style has_denorm + = denorm_absent; + static _GLIBCXX_USE_CONSTEXPR bool has_denorm_loss = false; + + static _GLIBCXX_CONSTEXPR __uint128_t + infinity() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__uint128_t>(0); } + + static _GLIBCXX_CONSTEXPR __uint128_t + quiet_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__uint128_t>(0); } + + static _GLIBCXX_CONSTEXPR __uint128_t + signaling_NaN() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__uint128_t>(0); } + + static _GLIBCXX_CONSTEXPR __uint128_t + denorm_min() _GLIBCXX_USE_NOEXCEPT + { return static_cast<__uint128_t>(0); } + + static _GLIBCXX_USE_CONSTEXPR bool is_iec559 = false; + static _GLIBCXX_USE_CONSTEXPR bool is_bounded = true; + static _GLIBCXX_USE_CONSTEXPR bool is_modulo = true; + + static _GLIBCXX_USE_CONSTEXPR bool traps = __glibcxx_integral_traps; + static _GLIBCXX_USE_CONSTEXPR bool tinyness_before = false; + static _GLIBCXX_USE_CONSTEXPR float_round_style round_style + = round_toward_zero; + }; +#endif + /// numeric_limits<float> specialization. template<> struct numeric_limits<float> |