aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-cfg.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r--gcc/tree-cfg.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index a585efe..0396aa9 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -5756,6 +5756,7 @@ gimple_make_forwarder_block (edge fallthru)
basic_block dummy, bb;
tree var;
gphi_iterator gsi;
+ bool forward_location_p;
dummy = fallthru->src;
bb = fallthru->dest;
@@ -5763,6 +5764,9 @@ gimple_make_forwarder_block (edge fallthru)
if (single_pred_p (bb))
return;
+ /* We can forward location info if we have only one predecessor. */
+ forward_location_p = single_pred_p (dummy);
+
/* If we redirected a branch we must create new PHI nodes at the
start of BB. */
for (gsi = gsi_start_phis (dummy); !gsi_end_p (gsi); gsi_next (&gsi))
@@ -5774,7 +5778,8 @@ gimple_make_forwarder_block (edge fallthru)
new_phi = create_phi_node (var, bb);
gimple_phi_set_result (phi, copy_ssa_name (var, phi));
add_phi_arg (new_phi, gimple_phi_result (phi), fallthru,
- UNKNOWN_LOCATION);
+ forward_location_p
+ ? gimple_phi_arg_location (phi, 0) : UNKNOWN_LOCATION);
}
/* Add the arguments we have stored on edges. */