diff options
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/doc/implement-c.texi | 8 |
2 files changed, 14 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 58b789b..3405b1d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-11-26 Paolo Bonzini <bonzini@gnu.org> + + * doc/implement-c.texi (Integers Implementation): Make GCC's promises + about signed left shift stronger and clarify the cases when they're + broken. + 2015-11-26 Kyrylo Tkachov <kyrylo.tkachov@arm.com> Bernd Schmidt <bschmidt@redhat.com> @@ -7682,6 +7688,9 @@ * fold-const.c (fold_binary_loc) : Move (-A) * (-B) -> A * B to match.pd. +* doc/implement-c.texi (Integers Implementation): Make GCC's promises +about signed left shift stronger and clarify the cases when they're +broken. Move (a * (1 << b)) is (a << b) to match.pd. Move convert (C1/X)*C2 into (C1*C2)/X to match.pd. Move ~X & X, (X == 0) & X, and !X & X are zero to match.pd. diff --git a/gcc/doc/implement-c.texi b/gcc/doc/implement-c.texi index b8f8f29..7fa3fb4 100644 --- a/gcc/doc/implement-c.texi +++ b/gcc/doc/implement-c.texi @@ -266,9 +266,11 @@ both the sign and value bits, where the sign bit is considered immediately above the highest-value value bit. Signed @samp{>>} acts on negative numbers by sign extension. -GCC does not use the latitude given in C99 and C11 only to treat certain -aspects of signed @samp{<<} as undefined, but this is subject to -change. +As an extension to the C language, GCC does not use the latitude given in +C99 and C11 only to treat certain aspects of signed @samp{<<} as undefined. +However, @option{-fsanitize=shift} (and @option{-fsanitize=undefined}) will +diagnose such cases. They are also diagnosed where constant +expressions are required. @item @cite{The sign of the remainder on integer division (C90 6.3.5).} |