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