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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
In C90, it was implemented defined behavior (while in C99 and above it is
undefined behavior).
See the thread which added undefined santizer:
https://gcc.gnu.org/ml/gcc-patches/2013-06/msg00275.html

For the "a < 0" here, and signed left shift of a positive value shifting a 
1 into or past the sign bit, I think it should be possible to control the 
checks separately from other checks on shifts - both because those cases 
were implementation-defined in C90, only undefined in C99/C11, and because 
they are widely used in practice.

--- CUT ---

See also https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54027 where a C90 program
is defined but C99 would be defined and there is talk about why too.


>I provide evidence that UBSAN behaves differently between the C89/C90 and 
>C11/C18 implementations.
Yes you did not read the full quote there.  The part about ubsan is with
respect to C99 undefined behavior.  AGain in C90, this is implementation
defined while C99 it is undefined.  YES there is a huge difference between the
languages which cannot be changed now as that would be requiring to change C90.

>ANSI C

ANSI C is ISO C.  ANSI is a member of ISO.  I think you meant to write ANSI C89
there :).

Reply via email to