This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: infinite for-loop and related question


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]