diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2023-05-10 12:20:58 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2023-05-11 12:16:21 +0100 |
commit | af595613acbd9863198ae69c7b1c9e856bca9e4f (patch) | |
tree | 5b50c79ef814a994cc3b13d59f709db1338b6381 /gcc | |
parent | 0918360d709a32294913aef4392cec6c1dec1857 (diff) | |
download | gcc-af595613acbd9863198ae69c7b1c9e856bca9e4f.zip gcc-af595613acbd9863198ae69c7b1c9e856bca9e4f.tar.gz gcc-af595613acbd9863198ae69c7b1c9e856bca9e4f.tar.bz2 |
libstdc++: Fix std::abs(__float128) for -NaN and -0.0 [PR109758]
The current implementation of this non-standard overload of std::abs
incorrectly returns a negative value for negative NaNs and negative
zero, because x < 0 is false in both cases.
Use fabsl(long double) or fabsf128(_Float128) if those do the right
thing. Otherwise, use __builtin_signbit(x) instead of x < 0 to detect
negative inputs. This assumes that __builtin_signbit handles __float128
correctly, but that seems to be true for all of GCC, clang and icc.
libstdc++-v3/ChangeLog:
PR libstdc++/109758
* include/bits/std_abs.h (abs(__float128)): Handle negative NaN
and negative zero correctly.
* testsuite/26_numerics/headers/cmath/109758.cc: New test.
Diffstat (limited to 'gcc')
0 files changed, 0 insertions, 0 deletions