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? -- Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <https://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)