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

With no optimization the program runs correctly by the rules of integers
representation in memory. See the explanation below.

>
> trace
> i    oldi
> 0    0
> 1    0    check here
> 1    1
> 2    1    check
> 2    2
>    .
>
> On Tuesday, August 20, 2002, at 01:11 , Thomas Deselaers wrote:
>
> > main() {
> >       int i=0;
> >       int oldi=0;;
> >       while(++i>oldi) oldi=i;
> >       return oldi;
> > }

This is more correct trace:

> trace
> i    oldi
> 0    0
> 1    0    check here
> 1    1
> 2    1    check
> 2    2
...
2^31-1  2^31-1
-2^31    2^31-1 check - that's it! Integer overflow. Exit from 'while'
cycle.

Of course, the programmer should not write such a code at all, but compiler
should correctly
compile any code.




Reply to: