gimplify.c (gimplify_expr): Make sure operand is boolified.

2011-05-13  Kai Tietz  <ktietz@redhat.com>

        * gimplify.c (gimplify_expr): Make sure operand is boolified.
        * tree-cfg.c (verify_gimple_assign_unary): Check for boolean
        compatible type for TRUTH_NOT_EXPR.

From-SVN: r173732
This commit is contained in:
Kai Tietz 2011-05-13 15:37:16 +02:00 committed by Kai Tietz
parent 2e7f5dc0e4
commit 3c6cbf7ad1
3 changed files with 26 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2011-05-13 Kai Tietz <ktietz@redhat.com>
* gimplify.c (gimplify_expr): Make sure operand is boolified.
* tree-cfg.c (verify_gimple_assign_unary): Check for boolean
compatible type for TRUTH_NOT_EXPR.
2011-05-13 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.c (ix86_save_reg): Change return type to

View File

@ -6754,13 +6754,17 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
}
case TRUTH_NOT_EXPR:
if (TREE_TYPE (*expr_p) != boolean_type_node)
{
tree type = TREE_TYPE (*expr_p);
*expr_p = fold_convert (type, gimple_boolify (*expr_p));
ret = GS_OK;
break;
}
{
tree org_type = TREE_TYPE (*expr_p);
*expr_p = gimple_boolify (*expr_p);
if (org_type != boolean_type_node)
{
*expr_p = fold_convert (org_type, *expr_p);
ret = GS_OK;
break;
}
}
ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p,
is_gimple_val, fb_rvalue);

View File

@ -3342,6 +3342,15 @@ verify_gimple_assign_unary (gimple stmt)
return false;
case TRUTH_NOT_EXPR:
if (!useless_type_conversion_p (boolean_type_node, rhs1_type))
{
error ("invalid types in truth not");
debug_generic_expr (lhs_type);
debug_generic_expr (rhs1_type);
return true;
}
break;
case NEGATE_EXPR:
case ABS_EXPR:
case BIT_NOT_EXPR: