aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2011-10-19 14:54:34 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2011-10-19 14:54:34 +0000
commitdd46054a5f6243d441fc1564de173a858ea4e3d4 (patch)
tree02c66940d76557ca76c3cfc4affa106d1affc4c2 /gcc
parent9aaa9e894a57c0a9b30b6a0bbdaceb293f41798e (diff)
downloadgcc-dd46054a5f6243d441fc1564de173a858ea4e3d4.zip
gcc-dd46054a5f6243d441fc1564de173a858ea4e3d4.tar.gz
gcc-dd46054a5f6243d441fc1564de173a858ea4e3d4.tar.bz2
re PR tree-optimization/50780 (ICE: verify_gimple failed: invalid operands in ternary operation with -ftree-vectorize -fnon-call-exceptions)
2011-10-19 Richard Guenther <rguenther@suse.de> PR middle-end/50780 * tree-ssa-forwprop.c (forward_propagate_into_cond): Verify the condition is properly gimple before using it. * tree-eh (stmt_could_throw_1_p): Properly extract the operation type from comparisons. From-SVN: r180192
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/tree-eh.c8
-rw-r--r--gcc/tree-ssa-forwprop.c3
3 files changed, 17 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3eb106f..e9b48b6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2011-10-19 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/50780
+ * tree-ssa-forwprop.c (forward_propagate_into_cond): Verify
+ the condition is properly gimple before using it.
+ * tree-eh (stmt_could_throw_1_p): Properly extract the
+ operation type from comparisons.
+
2011-10-19 Roland Stigge <stigge@antcom.de>
PR translation/48638
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index f751d8d..c1896be 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -2512,7 +2512,13 @@ stmt_could_throw_1_p (gimple stmt)
|| TREE_CODE_CLASS (code) == tcc_unary
|| TREE_CODE_CLASS (code) == tcc_binary)
{
- t = gimple_expr_type (stmt);
+ if (is_gimple_assign (stmt)
+ && TREE_CODE_CLASS (code) == tcc_comparison)
+ t = TREE_TYPE (gimple_assign_rhs1 (stmt));
+ else if (gimple_code (stmt) == GIMPLE_COND)
+ t = TREE_TYPE (gimple_cond_lhs (stmt));
+ else
+ t = gimple_expr_type (stmt);
fp_operation = FLOAT_TYPE_P (t);
if (fp_operation)
{
diff --git a/gcc/tree-ssa-forwprop.c b/gcc/tree-ssa-forwprop.c
index 1db93a6..d707db5 100644
--- a/gcc/tree-ssa-forwprop.c
+++ b/gcc/tree-ssa-forwprop.c
@@ -597,7 +597,8 @@ forward_propagate_into_cond (gimple_stmt_iterator *gsi_p)
}
}
- if (tmp)
+ if (tmp
+ && is_gimple_condexpr (tmp))
{
if (dump_file && tmp)
{