]> granicus.if.org Git - python/commitdiff
SF patch 730594: assert from longobject.c, line 1215.
authorTim Peters <tim.peters@gmail.com>
Mon, 5 May 2003 20:39:43 +0000 (20:39 +0000)
committerTim Peters <tim.peters@gmail.com>
Mon, 5 May 2003 20:39:43 +0000 (20:39 +0000)
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

index 15743f79a0792e8a7a48caa1009795922be11188..52c30c2be857821697fb4908bd20e204e117a151 100644 (file)
@@ -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);