aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2011-05-18 10:36:45 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2011-05-18 10:36:45 +0000
commit51c213f79189dd3527d1f66137c57bc4e68ec2d1 (patch)
treed9ef4a82dfd135eec5040536e17c442f8e9077e8 /gcc/tree-cfg.c
parent8f5e543422f5d052c6097e4283e21307445bf7ba (diff)
downloadgcc-51c213f79189dd3527d1f66137c57bc4e68ec2d1.zip
gcc-51c213f79189dd3527d1f66137c57bc4e68ec2d1.tar.gz
gcc-51c213f79189dd3527d1f66137c57bc4e68ec2d1.tar.bz2
re PR middle-end/48989 (FAIL: gfortran.dg/lto/pr46036 f_lto_pr46036_0.o assemble)
2011-05-18 Richard Guenther <rguenther@suse.de> PR middle-end/48989 * tree-cfg.c (verify_gimple_assign_unary): Adjust TRUTH op operand verification. (verify_gimple_assign_binary): Likewise. * tree-ssa.c (useless_type_conversion_p): Preserve conversions to non-1-precision BOOLEAN_TYPEs. From-SVN: r173854
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 9e74f58..957f1f1 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -3350,12 +3350,15 @@ verify_gimple_assign_unary (gimple stmt)
return false;
case TRUTH_NOT_EXPR:
- if (!useless_type_conversion_p (boolean_type_node, rhs1_type))
+ /* We require two-valued operand types. */
+ if (!(TREE_CODE (rhs1_type) == BOOLEAN_TYPE
+ || (INTEGRAL_TYPE_P (rhs1_type)
+ && TYPE_PRECISION (rhs1_type) == 1)))
{
- error ("invalid types in truth not");
- debug_generic_expr (lhs_type);
- debug_generic_expr (rhs1_type);
- return true;
+ error ("invalid types in truth not");
+ debug_generic_expr (lhs_type);
+ debug_generic_expr (rhs1_type);
+ return true;
}
break;
@@ -3558,10 +3561,13 @@ do_pointer_plus_expr_check:
case TRUTH_OR_EXPR:
case TRUTH_XOR_EXPR:
{
- /* We allow only boolean typed or compatible argument and result. */
- if (!useless_type_conversion_p (boolean_type_node, rhs1_type)
- || !useless_type_conversion_p (boolean_type_node, rhs2_type)
- || !useless_type_conversion_p (boolean_type_node, lhs_type))
+ /* 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);
@@ -3570,7 +3576,7 @@ do_pointer_plus_expr_check:
return true;
}
- return false;
+ break;
}
case LT_EXPR: