Velocity Reviews > x +1 > x

# x +1 > x

Spiros Bousbouras
Guest
Posts: n/a

 09-15-2007
In the thread "Eventual undefined behaviour" Harald van Dijk
said:

> The standard allows

> int f(int x) {
> return x + 1 > x;
> }
>
> to be optimised to
>
> int f(int x) {
> return 1;
> }

How does this follow from the standard ? And what would
happen if x was unsigned int ?

Thomas Lumley
Guest
Posts: n/a

 09-15-2007
On Sep 15, 6:41 am, Spiros Bousbouras <(E-Mail Removed)> wrote:
> In the thread "Eventual undefined behaviour" Harald van Dijk
> said:
>
> > The standard allows
> > int f(int x) {
> > return x + 1 > x;
> > }

>
> > to be optimised to

>
> > int f(int x) {
> > return 1;
> > }

>
> How does this follow from the standard ? And what would
> happen if x was unsigned int ?

If 'x' is not INT_MAX then f() must return 1, and if 'x is INT_MAX the
behaviour is undefined and so f() is permitted to return 1. Then by
the 'as if' rule, the function can compute the return value of 1 in
any way.

With unsigned int the optimization would not be permitted, since the
behaviour on overflow is defined and implies a return value of 0.

-thomas

Richard Heathfield
Guest
Posts: n/a

 09-15-2007
Thomas Lumley said:

<snip>

> With unsigned int the optimization would not be permitted, since the
> behaviour on overflow is defined and implies a return value of 0.

Not quite a correct explanation. The C Standard does not define the
behaviour of unsigned ints on overflow. Rather, it specifies unsigned
integer arithmetic in such a way that overflow is impossible.

Your description of the outcome, however, is correct.

--
Richard Heathfield <http://www.cpax.org.uk>
Email: -www. +rjh@
"Usenet is a strange place" - dmr 29 July 1999