infinite for-loop and related question
Jonathan Wakely
jwakely.gcc@gmail.com
Wed Feb 16 20:41:00 GMT 2011
On 16 February 2011 20:09, Jason Mancini wrote:
>
> Hello,
> So as I recall, the following can be an infinite loop now with optimizations, right?
>
> for (int i(1); i!=0; ++i) { ... }
Right.
> What about:
>
> unsigned int x = 0xFFFFFFFFU;
> x = x+1;
> if (x) { ... can we get here because "positive x + 1 must still positive"? ... }
>
> If not, given the first, why not?
No. The C and C++ standards define that unsigned integers do not
overflow, they wrap, with well-defined behaviour.
They do not define what happens if a signed integer overflows, so your
first loop results in undefined behaviour, and so you cannot
reasonably expect any particular behaviour. The compiler can do
whatever it likes with your code.
Put another way:
There is no way for a correct C or C++ program to increment a signed
integer greater than zero such that the result is zero. Because a
correct C or C++ program does not contain integer overflows.
More information about the Gcc-help
mailing list