From: Kazu Hirata Date: Sun, 21 May 2006 15:16:19 +0000 (+0000) Subject: re PR middle-end/26622 (ICE in extract_insn, at recog.c:2084) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5104d6484ac0a63c35986266affd74c6499b7bc6;p=gcc.git re PR middle-end/26622 (ICE in extract_insn, at recog.c:2084) gcc/ PR tree-optimization/26622. * fold-const.c (fold_ternary) : Call fold_convert on arg1. gcc/testsuite/ PR tree-optimization/26622. * gcc.c-torture/compile/pr26622.c: New. From-SVN: r113956 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 94ba6516bb0..7d644b8e4e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -5,6 +5,10 @@ simplifications of (eq/ne (xor x y) y) and (eq/ne (xor x y) x). + PR tree-optimization/26622. + * fold-const.c (fold_ternary) : Call fold_convert + on arg1. + 2006-05-21 Bernhard Fischer * tree-cfg.c: Prune whitespace. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index ef06eea0811..8672e48f756 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -11072,8 +11072,10 @@ fold_ternary (enum tree_code code, tree type, tree op0, tree op1, tree op2) && integer_zerop (TREE_OPERAND (arg0, 1)) && integer_zerop (op2) && (tem = sign_bit_p (TREE_OPERAND (arg0, 0), arg1))) - return fold_convert (type, fold_build2 (BIT_AND_EXPR, - TREE_TYPE (tem), tem, arg1)); + return fold_convert (type, + fold_build2 (BIT_AND_EXPR, + TREE_TYPE (tem), tem, + fold_convert (TREE_TYPE (tem), arg1))); /* (A >> N) & 1 ? (1 << N) : 0 is simply A & (1 << N). A & 1 was already handled above. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 11e358a67a1..91f55ee5058 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -4,6 +4,9 @@ * gcc.c-torture/execute/pr27671-1.c: New. * gcc.dg/pr27671-2.c: Likewise. + PR tree-optimization/26622. + * gcc.c-torture/compile/pr26622.c: New. + 2006-05-21 Paul Thomas PR fortran/27613 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr26622.c b/gcc/testsuite/gcc.c-torture/compile/pr26622.c new file mode 100644 index 00000000000..aea991ece35 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr26622.c @@ -0,0 +1,11 @@ +/* PR middle-end/26622 + fold_ternary used to create a tree with mismatching types, causing + (const_int 128) to appear in QImode rtx. */ + +unsigned char g; + +unsigned long long +foo (void) +{ + return ((long long) ((g & 0x80) != 0)) << 7; +}