This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR50780, make comparisons able to throw again ...
- From: Richard Guenther <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 19 Oct 2011 15:50:22 +0200 (CEST)
- Subject: [PATCH] Fix PR50780, make comparisons able to throw again ...
This fixes PR50780 by validating a condition is gimple before
substituting it into a COND_EXPR during forwprop. When looking
at this I noticed that comparisons no longer are marked as
possibly throwing - because of an old tuplification bug :/
Thus, fixed as well, hopefully without fallout.
Bootstrap and regtest running on x86_64-unknown-linux-gnu ...
Richard.
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.
Index: gcc/tree-ssa-forwprop.c
===================================================================
*** gcc/tree-ssa-forwprop.c (revision 180186)
--- gcc/tree-ssa-forwprop.c (working copy)
*************** forward_propagate_into_cond (gimple_stmt
*** 597,603 ****
}
}
! if (tmp)
{
if (dump_file && tmp)
{
--- 597,604 ----
}
}
! if (tmp
! && is_gimple_condexpr (tmp))
{
if (dump_file && tmp)
{
Index: gcc/tree-eh.c
===================================================================
*** gcc/tree-eh.c (revision 180186)
--- gcc/tree-eh.c (working copy)
*************** stmt_could_throw_1_p (gimple stmt)
*** 2512,2518 ****
|| TREE_CODE_CLASS (code) == tcc_unary
|| TREE_CODE_CLASS (code) == tcc_binary)
{
! t = gimple_expr_type (stmt);
fp_operation = FLOAT_TYPE_P (t);
if (fp_operation)
{
--- 2512,2524 ----
|| TREE_CODE_CLASS (code) == tcc_unary
|| TREE_CODE_CLASS (code) == tcc_binary)
{
! 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)
{