[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: c/7661: gcc-3.0 optimization bug on debian GNULinux on x86 with very simple program



> I think this program should not terminate at all because i will 
> always be one greater than oldi.
> I think gcc3.0 has a problem with no optimization then but since 
> there is later version that works gcc 3.1.1, upgrade.
> 
> Thanks,
> Andrew Pinski
> 

Agreed. Infact it doesn't terminate on all the systems I've tried (3).
But for the sake of presenting a test case :)

---
Test System: Dell XPS-T 450Mhz PIII (Debian testing/unstable)
---
Reading specs from /usr/lib/gcc-lib/i386-linux/3.0.4/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,objc --prefix=/usr --infodir=/share/info --mandir=/share/man --enable-shared --with-gnu-as --with-gnu-ld --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --disable-checking --enable-threads=posix --enable-java-gc=boehm --with-cpp-install-dir=bin --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.0.4
---

carlos@systemhalted:~$ cat test.c 
main() {                                                                                                      int i=0;                                                                                                int oldi=0;;                                                                                            while(++i>oldi) oldi=i;                                                                                 return oldi;                                                                                      }                 
carlos@systemhalted:~$ gcc-3.0 -O0 -o test test.c
carlos@systemhalted:~$ ./test
(Attach gdb, look at stuff, it's not stopping) ^C
carlos@systemhalted:~$ gcc-3.0 -o test test.c
carlos@systemhalted:~$ ./test
(Attach gdb, look at stuff, it's not stopping) ^C
---

Maybe you've been bad to your gcc ;)

In the optimized case (-O9) I see:
080483f8 <main>:
 80483f8:       55                      push   %ebp
 80483f9:       89 e5                   mov    %esp,%ebp
 80483fb:       83 ec 08                sub    $0x8,%esp
 80483fe:       83 e4 f0                and    $0xfffffff0,%esp
 8048401:       8d 76 00                lea    0x0(%esi),%esi
 8048404:       eb fe                   jmp    8048404 <main+0xc>
 8048406:       90                      nop    
 8048407:       90                      nop    

Which never terminates... and gcc knew it.

If there were some examples of gcc-3.0 mucking 
up optimizations... this isn't it.

c.



Reply to: