X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;ds=sidebyside;f=gcc%2Ftree-into-ssa.c;h=c90049ed337016e963b8192b64db9e19c1739622;hb=9d33046c199ad03cc0ba1210be7bcfbbcb136254;hp=243fe770e175103c4a77e033dad6491496f08d98;hpb=409a375f7e8602e12096eeeb10c65fc28cd9e7dc;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c index 243fe770e17..c90049ed337 100644 --- a/gcc/tree-into-ssa.c +++ b/gcc/tree-into-ssa.c @@ -1,5 +1,5 @@ /* Rewrite a program in Normal form into SSA. - Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Contributed by Diego Novillo @@ -1858,7 +1858,27 @@ maybe_register_def (def_operand_p def_p, gimple stmt, if (tracked_var) { gimple note = gimple_build_debug_bind (tracked_var, def, stmt); - gsi_insert_after (&gsi, note, GSI_SAME_STMT); + /* If stmt ends the bb, insert the debug stmt on the single + non-EH edge from the stmt. */ + if (gsi_one_before_end_p (gsi) && stmt_ends_bb_p (stmt)) + { + basic_block bb = gsi_bb (gsi); + edge_iterator ei; + edge e, ef = NULL; + FOR_EACH_EDGE (e, ei, bb->succs) + if (!(e->flags & EDGE_EH)) + { + gcc_assert (!ef); + ef = e; + } + gcc_assert (ef + && single_pred_p (ef->dest) + && !phi_nodes (ef->dest) + && ef->dest != EXIT_BLOCK_PTR); + gsi_insert_on_edge_immediate (ef, note); + } + else + gsi_insert_after (&gsi, note, GSI_SAME_STMT); } }