aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2024-07-26 17:23:03 +0100
committerThomas Koenig <tkoenig@gcc.gnu.org>2024-07-28 19:06:02 +0200
commitf3ed8cd8f72240a31d6591f0156ea7d3258b1736 (patch)
treec1c7619417bbda6c757f87706b97ae4686c47d81
parentb200461e0f3bf6450ec1cf17b4036ff2033607dc (diff)
downloadgcc-f3ed8cd8f72240a31d6591f0156ea7d3258b1736.zip
gcc-f3ed8cd8f72240a31d6591f0156ea7d3258b1736.tar.gz
gcc-f3ed8cd8f72240a31d6591f0156ea7d3258b1736.tar.bz2
libstdc++: Fix -Wsign-compare warning in <charconv>
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.
-rw-r--r--libstdc++-v3/include/std/charconv12
1 files changed, 6 insertions, 6 deletions
diff --git a/libstdc++-v3/include/std/charconv b/libstdc++-v3/include/std/charconv
index e516e3b..00c4f20 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)