This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C as intermediate language, signed integer overflow and -ftrapv

On Fri, 25 Jul 2014, Richard Biener wrote:

> Note the slight complication with static initializers that _do_ have
> to simplify to something (well, maybe not with -ftrapv ...).  Joseph,
> I can easily make fold fail if you don't explicitely use a constant
> folding API (int_const_binop) and -ftrapv is set.  Is it valid to
> reject
> static int x = __INT_MAX__ + 1;
> with an initializer-not-constant error?

Yes - -pedantic-errors already gives an error there, as it should.  Of 

static int x = 1 ? 0 : __INT_MAX__ + 1;

must not give an error, whereas one is OK (and required with 
-pedantic-errors) for

static int x = 0 * (__INT_MAX__ + 1);

(one of the cases where the answer you get is the same as if C integers 
had an infinite range, where some people are less concerned about ensuring 
runtime errors occur - like e.g. x * 2 / 2 - I think the starting point 
should be generating such errors whenever overflow occurs in the 
abstract machine and then possibly having options to omit some such 

(I tend to the view that -ftrapv should map to 
-fsanitize=signed-integer-overflow -fsanitize-undefined-trap-on-error so 
we only have the one implementation of these checks to get right and to 
optimize as much as possible.)

Joseph S. Myers

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]