re PR middle-end/71693 (ICE: verify_gimple failed (type mismatch in shift expression, -O0, -O1, -O2, -O3))
PR middle-end/71693 * fold-const.c (fold_binary_loc) <case RROTATE_EXPR>: Cast TREE_OPERAND (arg0, 0) and TREE_OPERAND (arg0, 1) to type first when permuting bitwise operation with rotate. Cast TREE_OPERAND (arg0, 0) to type when cancelling two rotations. * gcc.c-torture/compile/pr71693.c: New test. From-SVN: r237875
This commit is contained in:
parent
1bcf319ef8
commit
205cccc7c8
4 changed files with 33 additions and 6 deletions
|
@ -1,3 +1,11 @@
|
|||
2016-06-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/71693
|
||||
* fold-const.c (fold_binary_loc) <case RROTATE_EXPR>: Cast
|
||||
TREE_OPERAND (arg0, 0) and TREE_OPERAND (arg0, 1) to type
|
||||
first when permuting bitwise operation with rotate. Cast
|
||||
TREE_OPERAND (arg0, 0) to type when cancelling two rotations.
|
||||
|
||||
2016-06-29 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* opts.c (handle_param): Use find_param_fuzzy to offer suggestions
|
||||
|
|
|
@ -10294,11 +10294,15 @@ fold_binary_loc (location_t loc,
|
|||
|| TREE_CODE (arg0) == BIT_IOR_EXPR
|
||||
|| TREE_CODE (arg0) == BIT_XOR_EXPR)
|
||||
&& TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST)
|
||||
return fold_build2_loc (loc, TREE_CODE (arg0), type,
|
||||
fold_build2_loc (loc, code, type,
|
||||
TREE_OPERAND (arg0, 0), arg1),
|
||||
fold_build2_loc (loc, code, type,
|
||||
TREE_OPERAND (arg0, 1), arg1));
|
||||
{
|
||||
tree arg00 = fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0));
|
||||
tree arg01 = fold_convert_loc (loc, type, TREE_OPERAND (arg0, 1));
|
||||
return fold_build2_loc (loc, TREE_CODE (arg0), type,
|
||||
fold_build2_loc (loc, code, type,
|
||||
arg00, arg1),
|
||||
fold_build2_loc (loc, code, type,
|
||||
arg01, arg1));
|
||||
}
|
||||
|
||||
/* Two consecutive rotates adding up to the some integer
|
||||
multiple of the precision of the type can be ignored. */
|
||||
|
@ -10307,7 +10311,7 @@ fold_binary_loc (location_t loc,
|
|||
&& TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
|
||||
&& wi::umod_trunc (wi::add (arg1, TREE_OPERAND (arg0, 1)),
|
||||
prec) == 0)
|
||||
return TREE_OPERAND (arg0, 0);
|
||||
return fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0));
|
||||
|
||||
return NULL_TREE;
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-06-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/71693
|
||||
* gcc.c-torture/compile/pr71693.c: New test.
|
||||
|
||||
2016-06-29 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* gcc.dg/spellcheck-params.c: New testcase.
|
||||
|
|
10
gcc/testsuite/gcc.c-torture/compile/pr71693.c
Normal file
10
gcc/testsuite/gcc.c-torture/compile/pr71693.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* PR middle-end/71693 */
|
||||
|
||||
unsigned short v;
|
||||
|
||||
void
|
||||
foo (int x)
|
||||
{
|
||||
v = ((((unsigned short) (0x0001 | (x & 0x0070) | 0x0100) & 0x00ffU) << 8)
|
||||
| (((unsigned short) (0x0001 | (x & 0x0070) | 0x0100) >> 8) & 0x00ffU));
|
||||
}
|
Loading…
Add table
Reference in a new issue