tree.def: Document restriction on {L|R}SHIFT_EXPR's second argument.
authorToon Moene <toon@moene.indiv.nluug.nl>
Thu, 19 Jul 2001 18:33:30 +0000 (20:33 +0200)
committerToon Moene <toon@gcc.gnu.org>
Thu, 19 Jul 2001 18:33:30 +0000 (18:33 +0000)
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

gcc/ChangeLog
gcc/doc/c-tree.texi
gcc/f/ChangeLog
gcc/f/com.c
gcc/tree.def

index 9d23e01d3d375296e25198fed1dadfae7918f092..76125c6b5788caf1a43473a79b474e554ca06670 100644 (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>
 
index aa976e856229a85a512ec2eef48bbe82fc3224b8..a35ab4550e9c0105ecd493591bdd69212186215b 100644 (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
index c358f5dfe1851050a2878c98e245ddbed4552b70..15e93100b190858ffb6201b6d427957398ef9ffb 100644 (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
index 00618ba40cb6f7939edef63049fdc1edba5e90d2..d8a4d109ca69e3af137628623dda6fe740947ff9 100644 (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));
index 4a78694ae8ed8d969671d724cd511baeb44019ef..56bc8ef15e72c87c55740e596cb60d3c8b9cab4e 100644 (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)