On 2013-09-27 09:23:35 +0100, Andrew Haley wrote: > On 09/27/2013 08:57 AM, Vincent Lefevre wrote: > > On 2013-09-26 18:30:10 +0100, Andrew Haley wrote: > >> On 09/26/2013 06:02 PM, Vincent Lefevre wrote: > >>> On 2013-09-26 15:49:05 +0100, Andrew Haley wrote: > >>>> On 09/26/2013 09:29 AM, Vincent Lefevre wrote: > >>>>> On 2013-09-25 22:29:58 -0400, James K. Lowden wrote: > >>>>>> You mean that a naïve rendering of the source code implies an overflow > >>>>>> where none might exist in the actual emitted object code. And, > >>>>>> presumably, the converse: that even if the source is written such that > >>>>>> there logically can't be an overflow, the compiler might render object > >>>>>> code that does. > >>>>> > >>>>> The converse is forbidden. > >>>> > >>>> You'll find it hard to justify that by any language in the standard. > >>> > >>> What do you mean? > >> > >> There is no reason why a compiler should not generate an overflow > >> where none is written in the program, as long as it doesn't generate > >> a different result. > > > > OK, I wouldn't call that an overflow, then. > > As far as the processor is concerned, what sets the overflow flag is > an overflow. That's the context of this discussion. No, it isn't. If you regard the CPU overflow flag as a part of the result, then the compiler is not allowed to generate overflows not expressed in the source. Never. For instance, it would be really wrong to get spurious crashes with -ftrapv just because gcc modified the order of operations or just because the overflow flag has been set with an unsigned operation (at the C level). If you disregard the CPU overflow flag, then what the CPU does is not regarded as an overflow. Note that Dave Allured asked whether there is a way to check the CPU overflow flag on an example where there may be an overflow *in the source*. -- Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <http://www.vinc17.net/> 100% accessible validated (X)HTML - Blog: <http://www.vinc17.net/blog/> Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)