aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-06-28 05:44:57 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-06-28 05:44:57 -0400
commit2f6e6d22ea3315eaea0fe8ca1758dda03b8edeed (patch)
treeadec29a33d06dae327b3e9ab0f34062837a05d07 /gcc
parent127b0efcf797e954184e33af23dcf058a7f2a187 (diff)
downloadgcc-2f6e6d22ea3315eaea0fe8ca1758dda03b8edeed.zip
gcc-2f6e6d22ea3315eaea0fe8ca1758dda03b8edeed.tar.gz
gcc-2f6e6d22ea3315eaea0fe8ca1758dda03b8edeed.tar.bz2
(do_jump, case BIT_AND_EXPR): Only narrow to a type that corresponds
to a mode. From-SVN: r7580
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expr.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 2e0f5ef..46be1f3 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -8364,6 +8364,7 @@ do_jump (exp, if_false_label, if_true_label)
rtx comparison = 0;
int i;
tree type;
+ enum machine_mode mode;
emit_queue ();
@@ -8440,7 +8441,8 @@ do_jump (exp, if_false_label, if_true_label)
&& TREE_CODE (TREE_OPERAND (exp, 1)) == INTEGER_CST
&& TYPE_PRECISION (TREE_TYPE (exp)) <= HOST_BITS_PER_WIDE_INT
&& (i = floor_log2 (TREE_INT_CST_LOW (TREE_OPERAND (exp, 1)))) >= 0
- && (type = type_for_size (i + 1, 1)) != 0
+ && (mode = mode_for_size (i + 1, MODE_INT, 0)) != BLKmode
+ && (type = type_for_mode (mode, 1)) != 0
&& TYPE_PRECISION (type) < TYPE_PRECISION (TREE_TYPE (exp))
&& (cmp_optab->handlers[(int) TYPE_MODE (type)].insn_code
!= CODE_FOR_nothing))