https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67279

Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2015-08-19
                 CC|                            |manu at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #4 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
The reason for the error is that -fsanitize=undefined replaces 1<<31 with a
call to a sanitizer function __ubsan_handle_shift_out_of_bounds(), however,
this function call is not constant and it cannot be the initializer of a static
variable.

A possible solution could be to give a warning enabled by default (about 1 <<
31 being undefined) and to NOT sanitize expressions that are required to be
constants (since anyway the compiler will not accept them).

In any case, it makes sense that -fsanitize=undefined does not affect whether
the code is compiled or not.

Reply via email to