[SystemZ][z/OS][libcxx]: fix the mask in stage2_float_loop function

This patch is to fix issue related to __stage2_float_loop function, float point value comparison is not working on EBCDIC mode because the mask is hard-coded and assumes character is ASCII, fix is to use toupper function when do the comparison.

Differential Revision: https://reviews.llvm.org/D118930
This commit is contained in:
Nancy Wang 2022-10-18 15:53:03 -04:00 committed by Muiez Ahmed
parent df455beedf
commit 8266eefd91
1 changed files with 3 additions and 3 deletions

View File

@ -553,7 +553,7 @@ __num_get<_CharT>::__stage2_float_loop(_CharT __ct, bool& __in_units, char& __ex
char __x = __src[__f];
if (__x == '-' || __x == '+')
{
if (__a_end == __a || (__a_end[-1] & 0x5F) == (__exp & 0x7F))
if (__a_end == __a || (std::toupper(__a_end[-1]) == std::toupper(__exp)))
{
*__a_end++ = __x;
return 0;
@ -562,9 +562,9 @@ __num_get<_CharT>::__stage2_float_loop(_CharT __ct, bool& __in_units, char& __ex
}
if (__x == 'x' || __x == 'X')
__exp = 'P';
else if ((__x & 0x5F) == __exp)
else if (std::toupper(__x) == __exp)
{
__exp |= (char) 0x80;
__exp = std::tolower(__exp);
if (__in_units)
{
__in_units = false;