[committed] libstdc++: Use unsigned char argument to std::isdigit

Jonathan Wakely jwakely@redhat.com
Thu May 6 12:43:32 GMT 2021


On 05/05/21 22:14 +0100, Jonathan Wakely wrote:
>On 05/05/21 21:57 +0200, François Dumont via Libstdc++ wrote:
>>On 05/05/21 2:01 pm, Jonathan Wakely via Libstdc++ wrote:
>>>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.
>>>
>>       unsigned char __c = *__first;
>>-      if (std::isdigit(__c))
>>+      if (std::isdigit(static_cast<unsigned char>(__c)))
>>
>>I am very curious to know what this static_cast<unsigned char> does 
>>on __c which is already unsigned char ? If it does I'll just start 
>>to hate C++ :-)
>>
>>Maybe you wanted to put it on the previous *__first ?
>
>Ugh, yes, but it's not even needed there because the implicit
>conversion is fine.
>
>We do need to fix the isspace calls in src/c++11/debug.cc but this one
>was already correct. Thanks!

I've reverted that useless change, thanks for noticing it.




More information about the Libstdc++ mailing list