Passing plain char to isdigit is undefined if the value is negative.

libstdc++-v3/ChangeLog:

        * include/std/charconv (__from_chars_alnum): Pass unsigned
        char to std::isdigit.

Tested powerpc64le-linux. Committed to trunk.

commit d0d6ca019717305df0ef41e3fe1da48f7f561fac
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Wed May 5 11:19:55 2021

    libstdc++: Use unsigned char argument to std::isdigit
    
    Passing plain char to isdigit is undefined if the value is negative.
    
    libstdc++-v3/ChangeLog:
    
            * include/std/charconv (__from_chars_alnum): Pass unsigned
            char to std::isdigit.

diff --git a/libstdc++-v3/include/std/charconv 
b/libstdc++-v3/include/std/charconv
index 193702e677a..571be075a6b 100644
--- a/libstdc++-v3/include/std/charconv
+++ b/libstdc++-v3/include/std/charconv
@@ -565,7 +565,7 @@ namespace __detail
       while (__first != __last)
        {
          unsigned char __c = *__first;
-         if (std::isdigit(__c))
+         if (std::isdigit(static_cast<unsigned char>(__c)))
            __c -= '0';
          else
            {

Reply via email to