From: Kai Tietz Date: Fri, 13 May 2011 13:37:16 +0000 (+0200) Subject: gimplify.c (gimplify_expr): Make sure operand is boolified. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3c6cbf7ad1abf48e18c7130feb6e4f60fad938f7;p=gcc.git gimplify.c (gimplify_expr): Make sure operand is boolified. 2011-05-13 Kai Tietz * 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 62015642ef5..52e6f10d586 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-05-13 Kai Tietz + + * 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 * config/i386/i386.c (ix86_save_reg): Change return type to diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 33a76a266a8..d776692d715 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -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); diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index aa73f5ea3a5..c5fa41637cc 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -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: