mirror of
https://github.com/intel/llvm.git
synced 2026-01-27 06:06:34 +08:00
[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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user