implement-c.texi (Integers Implementation): Make GCC's promises about signed left shift stronger and clarify the cases when...

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.

From-SVN: r230931
This commit is contained in:
Paolo Bonzini 2015-11-26 10:16:56 +00:00
parent b3877860a8
commit a37a22da2d
2 changed files with 14 additions and 3 deletions

View File

@ -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> 2015-11-26 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
Bernd Schmidt <bschmidt@redhat.com> Bernd Schmidt <bschmidt@redhat.com>
@ -7682,6 +7688,9 @@
* fold-const.c (fold_binary_loc) : Move (-A) * (-B) -> A * B * fold-const.c (fold_binary_loc) : Move (-A) * (-B) -> A * B
to match.pd. 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 (a * (1 << b)) is (a << b) to match.pd.
Move convert (C1/X)*C2 into (C1*C2)/X 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. Move ~X & X, (X == 0) & X, and !X & X are zero to match.pd.

View File

@ -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 immediately above the highest-value value bit. Signed @samp{>>} acts
on negative numbers by sign extension. on negative numbers by sign extension.
GCC does not use the latitude given in C99 and C11 only to treat certain As an extension to the C language, GCC does not use the latitude given in
aspects of signed @samp{<<} as undefined, but this is subject to C99 and C11 only to treat certain aspects of signed @samp{<<} as undefined.
change. However, @option{-fsanitize=shift} (and @option{-fsanitize=undefined}) will
diagnose such cases. They are also diagnosed where constant
expressions are required.
@item @item
@cite{The sign of the remainder on integer division (C90 6.3.5).} @cite{The sign of the remainder on integer division (C90 6.3.5).}