This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
gcc optimizer bug in 2.95.2
- To: gcc-bugs at gcc dot gnu dot org
- Subject: gcc optimizer bug in 2.95.2
- From: Bob Peterson <bob at acdstar dot com>
- Date: Thu, 26 Oct 2000 13:06:09 -0500
Dear GCC gurus,
I don't know if this optimizer bug has been reported already, but here goes.
The following extremely simple C program below will produce incorrect
output when compiled with -O2. The output is correct if compiled with -O.
I'm running Redhat 6.2, with GCC 2.95.2.
This is very simple to recreate. Let me know if you have questions,
comments or concerns. Do you have an RPM that fixes this problem?
Regards,
Bob Peterson
bob@acdstar.com
ACD
Here is the program:
----------------------------------------------------------------------------
/* program gronk2 */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
int main()
{
char upc1[15],upc2[15];
int i;
memset(upc1,0,sizeof(upc1));
memset(upc2,0,sizeof(upc2));
strcpy(upc1,"0074646561225");
for (i=0; i<12; i++) {
upc2[i]=upc1[i+1];
}
upc2[i]='\0';
printf("upc1=%s upc2=%s i=%d\n",upc1,upc2,i);
}
----------------------------------------------------------------------------
When it is compiled with -O2 it produces this bad output:
upc1=0074646561225 upc2=07464656122 i=12
When it is compiled with -O it produces the correct output:
upc1=0074646561225 upc2=074646561225 i=12
----------------------------------------------------------------------------
Here is the compiler output as requested. I used the command to compile it:
gcc -v -save-temps -o gronk2 -O2 gronk2.cpp
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.95.2/specs
gcc version 2.95.2 19991024 (release)
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/cpp -lang-c++ -v -D__GNUC__=2
-D__GNUG__=2 -D__GNUC_MINOR__=95 -D__cplusplus -D__ELF__ -Dunix -D__i386__
-Dlinux -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__linux
-Asystem(posix) -D__EXCEPTIONS -D__OPTIMIZE__ -Acpu(i386) -Amachine(i386)
-Di386 -D__i386 -D__i386__ gronk2.cpp gronk2.ii
GNU CPP version 2.95.2 19991024 (release) (i386 Linux/ELF)
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/../../../../i386-redhat-linux/incl
ude
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/include
/usr/include
End of search list.
The following default directories have been omitted from the search path:
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/../../../../include/g++-3
End of omitted list.
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/cc1plus gronk2.ii -quiet
-dumpbase gronk2.cc -O2 -version -o gronk2.s
GNU C++ version 2.95.2 19991024 (release) (i386-redhat-linux) compiled by
GNU C version 2.95.2 19991024 (release).
as -V -Qy -o gronk2.o gronk2.s
GNU assembler version 2.9.5 (i386-redhat-linux) using BFD version 2.9.5.0.22
/usr/lib/gcc-lib/i386-redhat-linux/2.95.2/collect2 -m elf_i386
-dynamic-linker /lib/ld-linux.so.2 -o gronk2 /usr/lib/crt1.o
/usr/lib/crti.o /usr/lib/gcc-lib/i386-redhat-linux/2.95.2/crtbegin.o
-L/usr/lib/gcc-lib/i386-redhat-linux/2.95.2 -L/usr/i386-redhat-linux/lib
gronk2.o -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-redhat-linux/2.95.2/crtend.o
/usr/lib/crtn.o
----------------------------------------------------------------------------
Bob Peterson
Advanced Communication Design
(952) 854-4000
bob@acdstar.com