public inbox for libstdc++-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-2636] libstdc++: Define std::stof fallback in terms of std::stod [PR110653]
@ 2023-07-19 10:04 Jonathan Wakely
0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2023-07-19 10:04 UTC (permalink / raw)
To: gcc-cvs, libstdc++-cvs
https://gcc.gnu.org/g:f0b0c21152b337bc9a8ef3a72a15c8dcdff1d847
commit r14-2636-gf0b0c21152b337bc9a8ef3a72a15c8dcdff1d847
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Sat Jul 15 20:41:28 2023 +0100
libstdc++: Define std::stof fallback in terms of std::stod [PR110653]
For targets without std::strtof we can define std::stof by calling
std::stod and then checking if the result is out of range of float.
libstdc++-v3/ChangeLog:
PR libstdc++/110653
* include/bits/basic_string.h [!_GLIBCXX_HAVE_STRTOF] (stof):
Define in terms of std::stod.
Diff:
---
libstdc++-v3/include/bits/basic_string.h | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index 32f5d4421f7..e4cb9846025 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -4153,6 +4153,22 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
inline float
stof(const string& __str, size_t* __idx = 0)
{ return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); }
+#else
+ inline float
+ stof(const string& __str, size_t* __idx = 0)
+ {
+ double __d = std::stod(__str, __idx);
+ if (__builtin_isfinite(__d))
+ {
+ double __abs_d = __builtin_fabs(__d);
+ if (__abs_d < __FLT_MIN__ || __abs_d > __FLT_MAX__)
+ {
+ errno = ERANGE;
+ std::__throw_out_of_range("stof");
+ }
+ }
+ return __d;
+ }
#endif
#if _GLIBCXX_USE_C99_STDLIB || _GLIBCXX_HAVE_STRTOLD
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-07-19 10:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-19 10:04 [gcc r14-2636] libstdc++: Define std::stof fallback in terms of std::stod [PR110653] Jonathan Wakely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).