stmt.c (expand_end_bindings): Look through NOTEs to find a BARRIER.
authorJason Merrill <jason@casey.soma.redhat.com>
Thu, 25 May 2000 00:36:28 +0000 (00:36 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 25 May 2000 00:36:28 +0000 (20:36 -0400)
        * stmt.c (expand_end_bindings): Look through NOTEs to find a
        BARRIER.

From-SVN: r34149

gcc/ChangeLog
gcc/stmt.c

index 27b5554..0ff533f 100644 (file)
@@ -1,3 +1,8 @@
+2000-05-24  Jason Merrill  <jason@casey.soma.redhat.com>
+
+       * stmt.c (expand_end_bindings): Look through NOTEs to find a
+       BARRIER.
+
 2000-05-24  Mark Mitchell  <mark@codesourcery.com>
 
        * calls.c (expand_call): Handle cleanups in tail-recursion
index a3b72ea..81f4132 100644 (file)
@@ -3675,8 +3675,8 @@ expand_end_bindings (vars, mark_ends, dont_jump_in)
   if (thisblock->data.block.stack_level != 0
       || thisblock->data.block.cleanups != 0)
     {
-      /* Only clean up here if this point can actually be reached.  */
-      int reachable = GET_CODE (get_last_insn ()) != BARRIER;
+      int reachable;
+      rtx insn;
 
       /* Don't let cleanups affect ({...}) constructs.  */
       int old_expr_stmts_for_value = expr_stmts_for_value;
@@ -3684,6 +3684,12 @@ expand_end_bindings (vars, mark_ends, dont_jump_in)
       tree old_last_expr_type = last_expr_type;
       expr_stmts_for_value = 0;
 
+      /* Only clean up here if this point can actually be reached.  */
+      insn = get_last_insn ();
+      if (GET_CODE (insn) == NOTE)
+       insn = prev_nonnote_insn (insn);
+      reachable = GET_CODE (insn) != BARRIER;
+      
       /* Do the cleanups.  */
       expand_cleanups (thisblock->data.block.cleanups, NULL_TREE, 0, reachable);
       if (reachable)