This is the mail archive of the gcc@gcc.gnu.org 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 
course

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 
errors).

(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
joseph@codesourcery.com


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