aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Tietz <ktietz@redhat.com>2011-05-13 15:37:16 +0200
committerKai Tietz <ktietz@gcc.gnu.org>2011-05-13 15:37:16 +0200
commit3c6cbf7ad1abf48e18c7130feb6e4f60fad938f7 (patch)
treeb843d80ae46c2b1f7619c542f88fb859c50782cc
parent2e7f5dc0e434647df5e36133a81500139635e131 (diff)
downloadgcc-3c6cbf7ad1abf48e18c7130feb6e4f60fad938f7.zip
gcc-3c6cbf7ad1abf48e18c7130feb6e4f60fad938f7.tar.gz
gcc-3c6cbf7ad1abf48e18c7130feb6e4f60fad938f7.tar.bz2
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimplify.c18
-rw-r--r--gcc/tree-cfg.c9
3 files changed, 26 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6201564..52e6f10 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 33a76a2..d776692 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 aa73f5e..c5fa416 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: