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 ?

On Sep 15, 6:41 am, Spiros Bousbouras <> 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

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@ Google users: <http://www.cpax.org.uk/prg/writings/googly.php> "Usenet is a strange place" - dmr 29 July 1999