aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-eh.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-04-26 17:22:55 -0400
committerNathan Froyd <froydnj@gcc.gnu.org>2011-04-26 21:22:55 +0000
commitffa037724f62366e4e78b496f182d999ea7b75ce (patch)
tree62f2e2ca40de41d2f7dbc8bf99d272ddbbc94228 /gcc/tree-eh.c
parent3982d356b2f3ffe2f76e93c27c09740f126feadd (diff)
downloadgcc-ffa037724f62366e4e78b496f182d999ea7b75ce.zip
gcc-ffa037724f62366e4e78b496f182d999ea7b75ce.tar.gz
gcc-ffa037724f62366e4e78b496f182d999ea7b75ce.tar.bz2
tree-eh.c (lower_try_finally_switch): Create the label along with the CASE_LABEL_EXPR.
* tree-eh.c (lower_try_finally_switch): Create the label along with the CASE_LABEL_EXPR. From-SVN: r172988
Diffstat (limited to 'gcc/tree-eh.c')
-rw-r--r--gcc/tree-eh.c14
1 files changed, 3 insertions, 11 deletions
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index 60e2236..af12b11 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -1419,11 +1419,9 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
void **slot;
case_lab = build3 (CASE_LABEL_EXPR, void_type_node,
build_int_cst (NULL, switch_id),
- NULL, NULL);
+ NULL, create_artificial_label (tf_loc));
/* We store the cont_stmt in the pointer map, so that we can recover
- it in the loop below. We don't create the new label while
- walking the goto_queue because pointers don't offer a stable
- order. */
+ it in the loop below. */
if (!cont_map)
cont_map = pointer_map_create ();
slot = pointer_map_insert (cont_map, case_lab);
@@ -1433,7 +1431,6 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
}
for (j = last_case_index; j < last_case_index + nlabels; j++)
{
- tree label;
gimple cont_stmt;
void **slot;
@@ -1443,15 +1440,10 @@ lower_try_finally_switch (struct leh_state *state, struct leh_tf_state *tf)
gcc_assert (cont_map);
slot = pointer_map_contains (cont_map, last_case);
- /* As the comment above suggests, CASE_LABEL (last_case) was just a
- placeholder, it does not store an actual label, yet. */
gcc_assert (slot);
cont_stmt = *(gimple *) slot;
- label = create_artificial_label (tf_loc);
- CASE_LABEL (last_case) = label;
-
- x = gimple_build_label (label);
+ x = gimple_build_label (CASE_LABEL (last_case));
gimple_seq_add_stmt (&switch_body, x);
gimple_seq_add_stmt (&switch_body, cont_stmt);
maybe_record_in_goto_queue (state, cont_stmt);