OSDN Git Service

2001-07-19 Toon Moene <toon@moene.indiv.nluug.nl>
authortoon <toon@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 Jul 2001 18:33:30 +0000 (18:33 +0000)
committertoon <toon@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 19 Jul 2001 18:33:30 +0000 (18:33 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44156 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 9d23e01..76125c6 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 aa976e8..a35ab45 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 c358f5d..15e9310 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 00618ba..d8a4d10 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 4a78694..56bc8ef 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)