* [committed] libstdc++: Fix -Wsign-compare warning in <charconv>
@ 2024-07-27 11:49 Jonathan Wakely
0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2024-07-27 11:49 UTC (permalink / raw)
To: libstdc++, gcc-patches
Tested x86_64-linux. Pushed to trunk.
-- >8 --
Cast ptrdiff_t to size_t to avoid a -Wsign-compare warning. We can check
in __to_chars_i that the ptrdiff_t won't be negative, so that we know
the cast is safe.
libstdc++-v3/ChangeLog:
* include/std/charconv (__to_chars_16, __to_chars_10)
(__to_chars_8, __to_chars_2, __to_chars): Cast ptrdiff_t to
size_t for comparison.
(__to_chars_i): Check for first >= last instead of first == last
for initial sanity check.
---
libstdc++-v3/include/std/charconv | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/libstdc++-v3/include/std/charconv b/libstdc++-v3/include/std/charconv
index e516e3b2da8..00c4f206922 100644
--- a/libstdc++-v3/include/std/charconv
+++ b/libstdc++-v3/include/std/charconv
@@ -126,7 +126,7 @@ namespace __detail
const unsigned __len = __to_chars_len(__val, __base);
- if (__builtin_expect((__last - __first) < __len, 0))
+ if (__builtin_expect(size_t(__last - __first) < __len, 0))
{
__res.ptr = __last;
__res.ec = errc::value_too_large;
@@ -166,7 +166,7 @@ namespace __detail
const unsigned __len = (__to_chars_len_2(__val) + 3) / 4;
- if (__builtin_expect((__last - __first) < __len, 0))
+ if (__builtin_expect(size_t(__last - __first) < __len, 0))
{
__res.ptr = __last;
__res.ec = errc::value_too_large;
@@ -212,7 +212,7 @@ namespace __detail
const unsigned __len = __to_chars_len(__val, 10);
- if (__builtin_expect((__last - __first) < __len, 0))
+ if (__builtin_expect(size_t(__last - __first) < __len, 0))
{
__res.ptr = __last;
__res.ec = errc::value_too_large;
@@ -246,7 +246,7 @@ namespace __detail
else
__len = (__to_chars_len_2(__val) + 2) / 3;
- if (__builtin_expect((__last - __first) < __len, 0))
+ if (__builtin_expect(size_t(__last - __first) < __len, 0))
{
__res.ptr = __last;
__res.ec = errc::value_too_large;
@@ -288,7 +288,7 @@ namespace __detail
const unsigned __len = __to_chars_len_2(__val);
- if (__builtin_expect((__last - __first) < __len, 0))
+ if (__builtin_expect(size_t(__last - __first) < __len, 0))
{
__res.ptr = __last;
__res.ec = errc::value_too_large;
@@ -323,7 +323,7 @@ namespace __detail
using _Up = __detail::__unsigned_least_t<_Tp>;
_Up __unsigned_val = __value;
- if (__first == __last) [[__unlikely__]]
+ if (__first >= __last) [[__unlikely__]]
return { __last, errc::value_too_large };
if (__value == 0)
--
2.45.2
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-07-27 11:49 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-07-27 11:49 [committed] libstdc++: Fix -Wsign-compare warning in <charconv> 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).