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:
Kai Tietz 2011-05-19 13:16:20 +02:00 committed by Kai Tietz
parent 0967b22889
commit da5fb46991
3 changed files with 24 additions and 20 deletions

View File

@ -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>

View File

@ -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;

View File

@ -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: