tree-cfg.c (verify_gimple_assign_binary): Barf on TRUTH_AND_EXPR, TRUTH_OR_EXPR, and TRUTH_XOR_EXPR.
2011-05-19 Kai Tietz <ktietz@redhat.com> * tree-cfg.c (verify_gimple_assign_binary): Barf on TRUTH_AND_EXPR, TRUTH_OR_EXPR, and TRUTH_XOR_EXPR. (gimplify_expr): Move TRUTH_AND|OR|XOR_EXPR to its binary form. From-SVN: r173903
This commit is contained in:
parent
0967b22889
commit
da5fb46991
3 changed files with 24 additions and 20 deletions
|
@ -1,3 +1,9 @@
|
|||
2011-05-19 Kai Tietz <ktietz@redhat.com>
|
||||
|
||||
* tree-cfg.c (verify_gimple_assign_binary): Barf on
|
||||
TRUTH_AND_EXPR, TRUTH_OR_EXPR, and TRUTH_XOR_EXPR.
|
||||
(gimplify_expr): Move TRUTH_AND|OR|XOR_EXPR to its binary form.
|
||||
|
||||
2011-05-19 Anatoly Sokolov <aesok@post.ru>
|
||||
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
|
|
|
@ -7210,7 +7210,23 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* With two-valued operand types binary truth expressions are
|
||||
semantically equivalent to bitwise binary expressions. Canonicalize
|
||||
them to the bitwise variant. */ switch (TREE_CODE (*expr_p))
|
||||
{
|
||||
case TRUTH_AND_EXPR:
|
||||
TREE_SET_CODE (*expr_p, BIT_AND_EXPR);
|
||||
break;
|
||||
case TRUTH_OR_EXPR:
|
||||
TREE_SET_CODE (*expr_p, BIT_IOR_EXPR);
|
||||
break;
|
||||
case TRUTH_XOR_EXPR:
|
||||
TREE_SET_CODE (*expr_p, BIT_XOR_EXPR);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
/* Classified as tcc_expression. */
|
||||
goto expr_2;
|
||||
|
||||
|
|
|
@ -3555,29 +3555,11 @@ do_pointer_plus_expr_check:
|
|||
|
||||
case TRUTH_ANDIF_EXPR:
|
||||
case TRUTH_ORIF_EXPR:
|
||||
gcc_unreachable ();
|
||||
|
||||
case TRUTH_AND_EXPR:
|
||||
case TRUTH_OR_EXPR:
|
||||
case TRUTH_XOR_EXPR:
|
||||
{
|
||||
/* We require two-valued operand types. */
|
||||
if (!(TREE_CODE (rhs1_type) == BOOLEAN_TYPE
|
||||
|| (INTEGRAL_TYPE_P (rhs1_type)
|
||||
&& TYPE_PRECISION (rhs1_type) == 1))
|
||||
|| !(TREE_CODE (rhs2_type) == BOOLEAN_TYPE
|
||||
|| (INTEGRAL_TYPE_P (rhs2_type)
|
||||
&& TYPE_PRECISION (rhs2_type) == 1)))
|
||||
{
|
||||
error ("type mismatch in binary truth expression");
|
||||
debug_generic_expr (lhs_type);
|
||||
debug_generic_expr (rhs1_type);
|
||||
debug_generic_expr (rhs2_type);
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
gcc_unreachable ();
|
||||
|
||||
case LT_EXPR:
|
||||
case LE_EXPR:
|
||||
|
|
Loading…
Add table
Reference in a new issue