On Sep 15, 6:41 am, Spiros Bousbouras <spi...@gmail.com> 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
|