diff options
author | Marek Polacek <polacek@redhat.com> | 2023-10-19 17:48:44 -0400 |
---|---|---|
committer | Marek Polacek <polacek@redhat.com> | 2023-10-20 12:35:58 -0400 |
commit | 1d9263f292c3efc4e37c3a88117388e86d19b954 (patch) | |
tree | e9ea5f5502b048f6e1fb40ca7b3ededbf29fb999 | |
parent | 24cf1f600b8ad34c68a51f48884e72d01f729893 (diff) | |
download | gcc-1d9263f292c3efc4e37c3a88117388e86d19b954.zip gcc-1d9263f292c3efc4e37c3a88117388e86d19b954.tar.gz gcc-1d9263f292c3efc4e37c3a88117388e86d19b954.tar.bz2 |
libstdc++: add casts to from_chars in <charconv> [PR111883]
This fixes
.../charconv: In function 'std::from_chars_result std::from_chars(const char*, const char*, _Float16&, chars_format)':
.../charconv:687:17: warning: converting to '_Float16' from 'float' with greater conversion rank
687 | __value = __val;
| ^~~~~
.../charconv: In function 'std::from_chars_result std::from_chars(const char*, const char*, __gnu_cxx::__bfloat16_t&, chars_format)':
.../charconv:763:17: warning: converting to '__gnu_cxx::__bfloat16_t' {aka '__bf16'} from 'float' with greater conversion rank
763 | __value = __val;
| ^~~~~
which was breaking a test:
FAIL: g++.dg/warn/Wstringop-overflow-6.C -std=gnu++26 (test for excess errors)
PR testsuite/111883
libstdc++-v3/ChangeLog:
* include/std/charconv (from_chars): Add explicit casts.
-rw-r--r-- | libstdc++-v3/include/std/charconv | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/libstdc++-v3/include/std/charconv b/libstdc++-v3/include/std/charconv index cb428fe..6cb7fec 100644 --- a/libstdc++-v3/include/std/charconv +++ b/libstdc++-v3/include/std/charconv @@ -684,7 +684,7 @@ namespace __detail from_chars_result __res = __from_chars_float16_t(__first, __last, __val, __fmt); if (__res.ec == errc{}) - __value = __val; + __value = _Float16(__val); return __res; } #endif @@ -697,7 +697,7 @@ namespace __detail float __val; from_chars_result __res = from_chars(__first, __last, __val, __fmt); if (__res.ec == errc{}) - __value = __val; + __value = _Float32(__val); return __res; } #endif @@ -710,7 +710,7 @@ namespace __detail double __val; from_chars_result __res = from_chars(__first, __last, __val, __fmt); if (__res.ec == errc{}) - __value = __val; + __value = _Float64(__val); return __res; } #endif @@ -723,7 +723,7 @@ namespace __detail long double __val; from_chars_result __res = from_chars(__first, __last, __val, __fmt); if (__res.ec == errc{}) - __value = __val; + __value = _Float128(__val); return __res; } #elif defined(__STDCPP_FLOAT128_T__) && defined(_GLIBCXX_HAVE_FLOAT128_MATH) @@ -739,7 +739,7 @@ namespace __detail __extension__ __ieee128 __val; from_chars_result __res = from_chars(__first, __last, __val, __fmt); if (__res.ec == errc{}) - __value = __val; + __value = _Float128(__val); return __res; } #else @@ -760,7 +760,7 @@ namespace __detail from_chars_result __res = __from_chars_bfloat16_t(__first, __last, __val, __fmt); if (__res.ec == errc{}) - __value = __val; + __value = __gnu_cxx::__bfloat16_t(__val); return __res; } #endif |