This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Make fold_stmt not transfer EH info
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Tue, 15 Sep 2015 14:35:09 +0200 (CEST)
- Subject: [PATCH] Make fold_stmt not transfer EH info
- Authentication-results: sourceware.org; auth=none
This makes fold_stmt consistently not transfer EH info from old to new
stmt as callers are responsible for that (and for removing dead EH
edges).
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
Richard.
2015-09-15 Richard Biener <rguenther@suse.de>
* gimple-fold.c (gimplify_and_update_call_from_tree): Do not
transfer EH info from old to new stmt.
(replace_call_with_value): Likewise.
(replace_call_with_call_and_fold): Likewise.
(gimple_fold_builtin_memory_op): Likewise.
(gimple_fold_builtin_memset): Likewise.
(gimple_fold_builtin_stpcpy): Likewise.
(gimple_fold_call): Likewise.
* gcc.dg/pr67563.c: New testcase.
Index: gcc/gimple-fold.c
===================================================================
*** gcc/gimple-fold.c (revision 227779)
--- gcc/gimple-fold.c (working copy)
*************** gimplify_and_update_call_from_tree (gimp
*** 548,554 ****
unlink_stmt_vdef (stmt);
release_defs (stmt);
}
! gsi_replace (si_p, gimple_build_nop (), true);
return;
}
}
--- 549,555 ----
unlink_stmt_vdef (stmt);
release_defs (stmt);
}
! gsi_replace (si_p, gimple_build_nop (), false);
return;
}
}
*************** replace_call_with_value (gimple_stmt_ite
*** 589,595 ****
unlink_stmt_vdef (stmt);
release_ssa_name (vdef);
}
! gsi_replace (gsi, repl, true);
}
/* Replace the call at *GSI with the new call REPL and fold that
--- 590,596 ----
unlink_stmt_vdef (stmt);
release_ssa_name (vdef);
}
! gsi_replace (gsi, repl, false);
}
/* Replace the call at *GSI with the new call REPL and fold that
*************** replace_call_with_call_and_fold (gimple_
*** 608,614 ****
gimple_set_vuse (repl, gimple_vuse (stmt));
SSA_NAME_DEF_STMT (gimple_vdef (repl)) = repl;
}
! gsi_replace (gsi, repl, true);
fold_stmt (gsi);
}
--- 609,615 ----
gimple_set_vuse (repl, gimple_vuse (stmt));
SSA_NAME_DEF_STMT (gimple_vdef (repl)) = repl;
}
! gsi_replace (gsi, repl, false);
fold_stmt (gsi);
}
*************** gimple_fold_builtin_memory_op (gimple_st
*** 655,661 ****
unlink_stmt_vdef (stmt);
release_ssa_name (vdef);
}
! gsi_replace (gsi, repl, true);
return true;
}
--- 656,662 ----
unlink_stmt_vdef (stmt);
release_ssa_name (vdef);
}
! gsi_replace (gsi, repl, false);
return true;
}
*************** gimple_fold_builtin_memory_op (gimple_st
*** 668,674 ****
release_ssa_name (gimple_vdef (stmt));
if (!lhs)
{
! gsi_replace (gsi, gimple_build_nop (), true);
return true;
}
goto done;
--- 669,675 ----
release_ssa_name (gimple_vdef (stmt));
if (!lhs)
{
! gsi_replace (gsi, gimple_build_nop (), false);
return true;
}
goto done;
*************** gimple_fold_builtin_memory_op (gimple_st
*** 750,756 ****
SSA_NAME_DEF_STMT (gimple_vdef (new_stmt)) = new_stmt;
if (!lhs)
{
! gsi_replace (gsi, new_stmt, true);
return true;
}
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
--- 756,762 ----
SSA_NAME_DEF_STMT (gimple_vdef (new_stmt)) = new_stmt;
if (!lhs)
{
! gsi_replace (gsi, new_stmt, false);
return true;
}
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
*************** gimple_fold_builtin_memory_op (gimple_st
*** 1030,1036 ****
SSA_NAME_DEF_STMT (gimple_vdef (new_stmt)) = new_stmt;
if (!lhs)
{
! gsi_replace (gsi, new_stmt, true);
return true;
}
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
--- 1036,1042 ----
SSA_NAME_DEF_STMT (gimple_vdef (new_stmt)) = new_stmt;
if (!lhs)
{
! gsi_replace (gsi, new_stmt, false);
return true;
}
gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT);
*************** done:
*** 1048,1054 ****
dest = force_gimple_operand_gsi (gsi, dest, false, NULL_TREE, true,
GSI_SAME_STMT);
gimple repl = gimple_build_assign (lhs, dest);
! gsi_replace (gsi, repl, true);
return true;
}
--- 1054,1060 ----
dest = force_gimple_operand_gsi (gsi, dest, false, NULL_TREE, true,
GSI_SAME_STMT);
gimple repl = gimple_build_assign (lhs, dest);
! gsi_replace (gsi, repl, false);
return true;
}
*************** gimple_fold_builtin_memset (gimple_stmt_
*** 1130,1136 ****
if (gimple_call_lhs (stmt))
{
gimple asgn = gimple_build_assign (gimple_call_lhs (stmt), dest);
! gsi_replace (gsi, asgn, true);
}
else
{
--- 1136,1142 ----
if (gimple_call_lhs (stmt))
{
gimple asgn = gimple_build_assign (gimple_call_lhs (stmt), dest);
! gsi_replace (gsi, asgn, false);
}
else
{
*************** gimple_fold_builtin_stpcpy (gimple_stmt_
*** 1980,1986 ****
gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
gassign *ret = gimple_build_assign (gimple_call_lhs (stmt),
POINTER_PLUS_EXPR, dest, tem);
! gsi_replace (gsi, ret, true);
/* Finally fold the memcpy call. */
gimple_stmt_iterator gsi2 = *gsi;
gsi_prev (&gsi2);
--- 1986,1992 ----
gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
gassign *ret = gimple_build_assign (gimple_call_lhs (stmt),
POINTER_PLUS_EXPR, dest, tem);
! gsi_replace (gsi, ret, false);
/* Finally fold the memcpy call. */
gimple_stmt_iterator gsi2 = *gsi;
gsi_prev (&gsi2);
*************** gimple_fold_call (gimple_stmt_iterator *
*** 3062,3068 ****
&& tree_int_cst_le (gimple_call_arg (stmt, 1),
gimple_call_arg (stmt, 2))))
{
! gsi_replace (gsi, gimple_build_nop (), true);
unlink_stmt_vdef (stmt);
release_defs (stmt);
return true;
--- 3068,3074 ----
&& tree_int_cst_le (gimple_call_arg (stmt, 1),
gimple_call_arg (stmt, 2))))
{
! gsi_replace (gsi, gimple_build_nop (), false);
unlink_stmt_vdef (stmt);
release_defs (stmt);
return true;
Index: gcc/testsuite/gcc.dg/pr67563.c
===================================================================
*** gcc/testsuite/gcc.dg/pr67563.c (revision 0)
--- gcc/testsuite/gcc.dg/pr67563.c (working copy)
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fexceptions" } */
+
+ static void
+ emit_package (int p1)
+ {
+ int a;
+ int b[0];
+ a = __fprintf_chk (0, 0, "");
+ }
+ void emit_lua () { emit_package (0); }