2010-01-21 Jakub Jelinek * tree-into-ssa.c (maybe_register_def): If stmt ends the bb, insert the debug stmt on the single non-EH edge from the stmt. --- gcc/tree-into-ssa.c.jj 2010-01-21 09:58:38.000000000 +0100 +++ gcc/tree-into-ssa.c 2010-01-21 12:25:22.000000000 +0100 @@ -1968,7 +1968,29 @@ maybe_register_def (def_operand_p def_p, if (tracked_var) { gimple note = gimple_build_debug_bind (tracked_var, def, stmt); - gsi_insert_after (&gsi, note, GSI_SAME_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)) + { + if (ef) + { + ef = NULL; + break; + } + ef = e; + } + if (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); } }