diff options
author | Toon Moene <toon@moene.indiv.nluug.nl> | 2001-07-19 20:33:30 +0200 |
---|---|---|
committer | Toon Moene <toon@gcc.gnu.org> | 2001-07-19 18:33:30 +0000 |
commit | 7d46d516525c2a1977766d88306e85493b841add (patch) | |
tree | 2ed7d4fa1d6ed1f855ef6d2b7b3558f67e086566 | |
parent | 5442cf157b9baa37766aae56711a5e598d025ab2 (diff) | |
download | gcc-7d46d516525c2a1977766d88306e85493b841add.tar.gz |
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
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/doc/c-tree.texi | 3 | ||||
-rw-r--r-- | gcc/f/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/f/com.c | 6 | ||||
-rw-r--r-- | gcc/tree.def | 4 |
5 files changed, 20 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9d23e01d3d3..76125c6b578 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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> diff --git a/gcc/doc/c-tree.texi b/gcc/doc/c-tree.texi index aa976e85622..a35ab4550e9 100644 --- a/gcc/doc/c-tree.texi +++ b/gcc/doc/c-tree.texi @@ -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 diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog index c358f5dfe18..15e93100b19 100644 --- a/gcc/f/ChangeLog +++ b/gcc/f/ChangeLog @@ -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 diff --git a/gcc/f/com.c b/gcc/f/com.c index 00618ba40cb..d8a4d109ca6 100644 --- a/gcc/f/com.c +++ b/gcc/f/com.c @@ -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)); diff --git a/gcc/tree.def b/gcc/tree.def index 4a78694ae8e..56bc8ef15e7 100644 --- a/gcc/tree.def +++ b/gcc/tree.def @@ -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) |