On Mon, Nov 09, 2015 at 09:28:49AM +0100, Vincent Lefevre wrote: > On 2015-11-08 18:49:46 -0600, Segher Boessenkool wrote: > > On Mon, Nov 09, 2015 at 01:27:34AM +0100, Vincent Lefevre wrote: > > > > Why not simply: > > > > unsigned y = x; > > > > return y*y*y; > > > > ? This is an example where defined behavior is so easy to get... > > > > > > But what if the result of y*y*y (an unsigned int) does not fit in > > > an int? > > > > That is implementation-defined. not undefined (6.3.1.3); GCC documents > > it like this: > > > > For conversion to a type of width N, the value is reduced modulo > > 2^N to be within range of the type; no signal is raised. > > That's what GCC does, but what if the user uses another compiler > or GCC decides to change this behavior in the future? Then it is still not undefined behaviour. It can give different results of course. Segher