summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToon Moene <toon@moene.indiv.nluug.nl>2001-07-19 20:33:30 +0200
committerToon Moene <toon@gcc.gnu.org>2001-07-19 18:33:30 +0000
commit7d46d516525c2a1977766d88306e85493b841add (patch)
tree2ed7d4fa1d6ed1f855ef6d2b7b3558f67e086566
parent5442cf157b9baa37766aae56711a5e598d025ab2 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/doc/c-tree.texi3
-rw-r--r--gcc/f/ChangeLog5
-rw-r--r--gcc/f/com.c6
-rw-r--r--gcc/tree.def4
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)