aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2023-06-09 11:08:03 +0100
committerJonathan Wakely <jwakely@redhat.com>2023-06-09 13:15:39 +0100
commit00da6bcfccbc5ab13821d8dd7334dd48c22d5702 (patch)
tree4a091bcd716dc8f548a073cdea2a30f5fbe234bc
parent793ed718b522b15e2d758eca953feeec1979fe2c (diff)
downloadgcc-00da6bcfccbc5ab13821d8dd7334dd48c22d5702.zip
gcc-00da6bcfccbc5ab13821d8dd7334dd48c22d5702.tar.gz
gcc-00da6bcfccbc5ab13821d8dd7334dd48c22d5702.tar.bz2
libstdc++: Remove duplicate definition of _Float128 std::from_chars [PR110077]
When long double uses IEEE binary128 representation we define the _Float128 overload of std::from_chars inline in <charconv>. My changes in r14-1431-g7037e7b6e4ac41 cause it to also be defined non-inline in the library, leading to an abi-check failure for (at least) sparc and aarch64. Suppress the definition in the library if long double and _Float128 have are both IEEE binary128. libstdc++-v3/ChangeLog: PR libstdc++/110077 * src/c++17/floating_from_chars.cc (from_chars) <_Float128>: Only define if _Float128 and long double have different representations.
-rw-r--r--libstdc++-v3/src/c++17/floating_from_chars.cc3
1 files changed, 2 insertions, 1 deletions
diff --git a/libstdc++-v3/src/c++17/floating_from_chars.cc b/libstdc++-v3/src/c++17/floating_from_chars.cc
index f1dd1037..3152d64 100644
--- a/libstdc++-v3/src/c++17/floating_from_chars.cc
+++ b/libstdc++-v3/src/c++17/floating_from_chars.cc
@@ -1325,7 +1325,8 @@ _ZSt10from_charsPKcS0_RDF128_St12chars_format(const char* first,
__ieee128& value,
chars_format fmt) noexcept
__attribute__((alias ("_ZSt10from_charsPKcS0_Ru9__ieee128St12chars_format")));
-#elif defined(__FLT128_MANT_DIG__)
+#elif __FLT128_MANT_DIG__ == 113 && __LDBL_MANT_DIG__ != 113
+// Overload for _Float128 is not defined inline in <charconv>, define it here.
from_chars_result
from_chars(const char* first, const char* last, _Float128& value,
chars_format fmt) noexcept