Sender: chad AT mail DOT arc DOT nasa DOT gov Message-ID: <37A68C4F.FE44DF8C@vision.arc.nasa.gov> Date: Tue, 03 Aug 1999 06:29:35 +0000 From: Chad Netzer X-Mailer: Mozilla 4.61 [en] (X11; I; Linux 2.2.10 i686) X-Accept-Language: en MIME-Version: 1.0 To: pgcc AT delorie DOT com Subject: Code generation bug in 1.1.3 when compiling Python 1.5.2 Content-Type: multipart/mixed; boundary="------------29BD17EA0B63A338F5F21CDC" Reply-To: pgcc AT delorie DOT com This is a multi-part message in MIME format. --------------29BD17EA0B63A338F5F21CDC Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit The enclosed program fails to compile correctly with PGCC 1.1.3 (the versions that comes with Mandrake 6.0) when optimization is selected. The resulting assembly language, when optimization is selected (-O1 for example) fails to include a vital "test" instruction after the left shift (x << 1), which it does using an "lea" instruction, rather than a traditional left shift operand. Here is the important section: if ((long)x < 0 && (sign > 0 || (x << 1) != 0)) goto overflow; and here is a section of the optimized assembly: 0x8048451 : test %ebx,%ebx 0x8048453 : jge 0x8048464 0x8048455 : cmpl $0x0,0xfffffffc(%ebp) 0x8048459 : jg 0x8048470 0x804845b : lea 0x0(,%ebx,2),%eax 0x8048462 : jne 0x8048470 There should probably be a test between main+91 and main+98 (since lea sets no condition codes). This bug was discovered when trying to compile the Python 1.5.2 sources on a Mandrake 6.0 system; the Python regression tests were able to determine that the optimized compiled version did not treat -MAXINT-1 properly (as this piece of code is supposed to handle the special wraparound case). Here is the relevant debugging info: % gcc -v --save-temps -O1 pgcc_bug.c Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/pgcc-2.91.66/specs gcc version pgcc-2.91.66 19990314 (egcs-1.1.2 release) /usr/lib/gcc-lib/i686-pc-linux-gnu/pgcc-2.91.66/cpp -lang-c -v -undef -D__GNUC__=2 -D__GNUC_MINOR__=91 -D__ELF__ -Dunix -Di386 -D__i386__ -Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux -Asystem(posix) -D__OPTIMIZE__ -Asystem(unix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -Di686 -Dpentiumpro -D__i686 -D__i686__ -D__pentiumpro -D__pentiumpro__ pgcc_bug.c pgcc_bug.i GNU CPP version pgcc-2.91.66 19990314 (egcs-1.1.2 release) (i386 Linux/ELF) #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc-lib/i686-pc-linux-gnu/pgcc-2.91.66/include /usr/include End of search list. /usr/lib/gcc-lib/i686-pc-linux-gnu/pgcc-2.91.66/cc1 pgcc_bug.i -quiet -dumpbase pgcc_bug.c -O1 -version -o pgcc_bug.s GNU C version pgcc-2.91.66 19990314 (egcs-1.1.2 release) (i686-pc-linux-gnu) compiled by GNU C version pgcc-2.91.66 19990314 (egcs-1.1.2 release). pgcc_bug.c: In function `main': pgcc_bug.c:12: warning: decimal constant is so large that it is unsigned as -V -Qy -o pgcc_bug.o pgcc_bug.s GNU assembler version 2.9.1 (i386-mandrake-linux), using BFD version 2.9.1.0.25 /usr/lib/gcc-lib/i686-pc-linux-gnu/pgcc-2.91.66/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc-lib/i686-pc-linux-gnu/pgcc-2.91.66/crtbegin.o -L/usr/lib/gcc-lib/i686-pc-linux-gnu/pgcc-2.91.66 pgcc_bug.o -lgcc -lc -lgcc /usr/lib/gcc-lib/i686-pc-linux-gnu/pgcc-2.91.66/crtend.o /usr/lib/crtn.o --------------29BD17EA0B63A338F5F21CDC Content-Type: text/plain; charset=us-ascii; name="pgcc_bug.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="pgcc_bug.c" #include #include main(int argc, char *argv[]) { unsigned long x; int i, sign; /* This is bogosity to fool the optimizer */ sign = -1; x = 2147483648; if (!strcmp(argv[0], "Never ever run this loop, just use it to insure the optimizer " "cannot rely on the x and sign vars being constant (and thus optimize" "away the whole test below exhibiting the bug.")) { i = 1; while (--i >= 10000) { /* large value to skip this loop */ x = x-1; sign = ~sign; } } /* * end of bogosity section, just needed to establish the threat * of modifying x, so that the compiler won't optimize it away. */ /* This next part exhibits the error. It should NOT goto the overflow label, because the (sign > 0) || (x << 1) != 0 part should resolve to FALSE. However, it can be shown that pgcc 1.1.3, when the optimization is on (even -O1), produces an "lea" instruction to do the left shift and then does a "je" without a "test". This "test" IS produced when optimization is NOT enabled, and the program behaves as it should. */ if ((long)x < 0 && (sign > 0 || (x << 1) != 0)) goto overflow; return (long)x * sign; overflow: printf("If this prints, there is a bug\n"); } --------------29BD17EA0B63A338F5F21CDC Content-Type: application/octet-stream; name="pgcc_bug.i.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pgcc_bug.i.bz2" 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 QpgTO8w= --------------29BD17EA0B63A338F5F21CDC--