www.delorie.com/archives/browse.cgi   search  
Mail Archives: pgcc/1999/08/04/02:13:51

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 <chad AT vision DOT arc DOT nasa DOT gov>
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
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 <main+81>: test   %ebx,%ebx
0x8048453 <main+83>: jge    0x8048464 <main+100>
0x8048455 <main+85>: cmpl   $0x0,0xfffffffc(%ebp)
0x8048459 <main+89>: jg     0x8048470 <main+112>
0x804845b <main+91>: lea    0x0(,%ebx,2),%eax
0x8048462 <main+98>: jne    0x8048470 <main+112>

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 <stdlib.h>
#include <stdio.h>

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--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019