This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH PING] c++-specific bits of tree-slimming patches


On 04/21/2011 10:55 PM, Nathan Froyd wrote:
On Thu, Apr 21, 2011 at 10:49:05PM -0400, Jason Merrill wrote:
Hunh.  How does that work?  They fill in CASE_LABEL later?  Can that be
changed?

Yeah, tree-eh.c:lower_try_finally_switch. I don't know how easy it is to fix; it certainly looks non-trivial.

Well, I tried adjusting it and regression testing seems fine so far. I can't think what the comment would be talking about with pointers not providing a stable order; I don't see anything that would rely on that.


Jason

commit 50cd5e483b89a3be6fd9e432edf1ece31f6756bd
Author: Jason Merrill <jason@redhat.com>
Date:   Fri Apr 22 00:47:36 2011 -0400

    bar

diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index 60e2236..feee182 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);
@@ -1443,13 +1441,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;
+      label = CASE_LABEL (last_case);
 
       x = gimple_build_label (label);
       gimple_seq_add_stmt (&switch_body, x);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]