From c7bc0b98e7cd2190a03da1a5269cdaaea711429e Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Mon, 5 May 2003 20:39:43 +0000 Subject: SF patch 730594: assert from longobject.c, line 1215. Some version of gcc in the "RTEMS port running on the Coldfire (m5200) processor" generates bad code for a loop in long_from_binary_base(), comparing the wrong half of an int to a short. The patch changes the decl of the short temp to be an int temp instead. This "simplifies" the code enough that gcc no longer blows it. --- Objects/longobject.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Objects/longobject.c b/Objects/longobject.c index 15743f7..52c30c2 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -1201,8 +1201,8 @@ long_from_binary_base(char **str, int base) bits_in_accum = 0; pdigit = z->ob_digit; while (--p >= start) { - unsigned char ch = (unsigned char)*p; - digit k; + int k; + char ch = *p; if (ch <= '9') k = ch - '0'; @@ -1212,8 +1212,8 @@ long_from_binary_base(char **str, int base) assert(ch >= 'A'); k = ch - 'A' + 10; } - assert(k < base); - accum |= k << bits_in_accum; + assert(k >= 0 && k < base); + accum |= (twodigits)(k << bits_in_accum); bits_in_accum += bits_per_char; if (bits_in_accum >= SHIFT) { *pdigit++ = (digit)(accum & MASK); -- cgit v0.12