aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.cc
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2023-06-05 16:14:29 +0100
committerJonathan Wakely <jwakely@redhat.com>2023-06-06 16:29:22 +0100
commit6261d10521f9fdc2a43d54b4dc365025288aa8e9 (patch)
treef96ad957cbaf8b1d6b76704ca9f32b6751181df0 /gcc/expr.cc
parent97a5e8a2a48d162744a5bd60a012ce6fca13cbbe (diff)
downloadgcc-6261d10521f9fdc2a43d54b4dc365025288aa8e9.zip
gcc-6261d10521f9fdc2a43d54b4dc365025288aa8e9.tar.gz
gcc-6261d10521f9fdc2a43d54b4dc365025288aa8e9.tar.bz2
libstdc++: Make std::numeric_limits<__float128> more portable [PR104772]
This redefines std::numeric_limits<__float128> so that it works with non-GCC compilers. The previous definition didn't work with Clang, due to it not supporting __builtin_high_valq, __builtin_nanq, and __builtin_nansq. It also didn't work in strict modes, due to using Q literal suffixes. The new definition uses the Q suffixes when supported, or calculates the correct values using __float128 arithmetic from double values. Ideally the values would be defined as hexadecimal-floating-point-literals, but that won't work for C++14 and older. The only member that can't be defined this way is signaling_NaN() which still requires a built-in. If __builtin_nansq is not supported, try to use __builtin_nansf128 (with a possibly-redundant bit_cast) and if that isn't supported, return a quiet NaN and define has_signaling_NaN and is_iec754 to be false. libstdc++-v3/ChangeLog: PR libstdc++/104772 * include/std/limits: (numeric_limits<__float128>): Define for __STRICT_ANSI__ as well. * testsuite/18_support/numeric_limits/128bit.cc: Remove check for __STRICT_ANSI__. Co-authored-by: Jakub Jelinek <jakub@redhat.com>
Diffstat (limited to 'gcc/expr.cc')
0 files changed, 0 insertions, 0 deletions