tree.def: Document restriction on {L|R}SHIFT_EXPR's second argument.

2001-07-19  Toon Moene  <toon@moene.indiv.nluug.nl>

	* tree.def: Document restriction on {L|R}SHIFT_EXPR's second argument.
	* doc/tree.texi: Ditto.
	* f/com.c (ffecom_expr_intrinsic_): Cope with it.

From-SVN: r44156
This commit is contained in:
Toon Moene 2001-07-19 20:33:30 +02:00 committed by Toon Moene
parent 5442cf157b
commit 7d46d51652
5 changed files with 20 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2001-07-19 Toon Moene <toon@moene.indiv.nluug.nl>
* tree.def: Document restriction on {L|R}SHIFT_EXPR's second argument.
* doc/tree.texi: Ditto.
2001-07-19 Mark Kettenis <kettenis@wins.uva.nl>
Jakub Jelinek <jakub@redhat.com>

View File

@ -2003,6 +2003,9 @@ second operand is an expression for the number of bits by which to
shift. Right shift should be treated as arithmetic, i.e., the
high-order bits should be zero-filled when the expression has unsigned
type and filled with the sign bit when the expression has signed type.
Note that the result is undefined if the second operand is larger
than the first operand's type size.
@item BIT_IOR_EXPR
@itemx BIT_XOR_EXPR

View File

@ -1,3 +1,8 @@
2001-07-19 Toon Moene <toon@moene.indiv.nluug.nl>
* f/com.c (ffecom_expr_intrinsic_): Deal (correctly) with
{L|R}SHIFT_EXPR not working when shift > size of type.
2001-07-17 Toon Moene <toon@moene.indiv.nluug.nl>
* com.c (lang_print_error_function): Argument context

View File

@ -4573,8 +4573,10 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
expr_tree
= ffecom_3 (COND_EXPR, tree_type,
ffecom_truth_value
(ffecom_2 (NE_EXPR, integer_type_node,
arg2_tree,
(ffecom_2 (LT_EXPR, integer_type_node,
ffecom_1 (ABS_EXPR,
integer_type_node,
arg2_tree),
TYPE_SIZE (uns_type))),
expr_tree,
convert (tree_type, integer_zero_node));

View File

@ -617,7 +617,9 @@ DEFTREECODE (FFS_EXPR, "ffs_expr", '1', 1)
Shift means logical shift if done on an
unsigned type, arithmetic shift if done on a signed type.
The second operand is the number of bits to
shift by; it need not be the same type as the first operand and result. */
shift by; it need not be the same type as the first operand and result.
Note that the result is undefined if the second operand is larger
than the first operand's type size. */
DEFTREECODE (LSHIFT_EXPR, "lshift_expr", '2', 2)
DEFTREECODE (RSHIFT_EXPR, "rshift_expr", '2', 2)
DEFTREECODE (LROTATE_EXPR, "lrotate_expr", '2', 2)