This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

gcc optimizer bug in 2.95.2


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]