> 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 via email to