except.c (expand_start_catch_block): We only need the rethrow region for non-sjlj...
authorJason Merrill <jason@yorick.cygnus.com>
Fri, 21 Nov 1997 20:23:57 +0000 (20:23 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 21 Nov 1997 20:23:57 +0000 (15:23 -0500)
* except.c (expand_start_catch_block): We only need the rethrow
  region for non-sjlj exceptions.
(expand_end_catch_block): Likewise.  Use outer_context_label_stack.

From-SVN: r16648

gcc/cp/ChangeLog
gcc/cp/except.c

index 82c0e86..c88e084 100644 (file)
@@ -1,3 +1,9 @@
+Fri Nov 21 12:22:07 1997  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * except.c (expand_start_catch_block): We only need the rethrow
+       region for non-sjlj exceptions.
+       (expand_end_catch_block): Likewise.  Use outer_context_label_stack.
+
 Thu Nov 20 14:40:17 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * Make-lang.in (CXX_LIB2FUNCS): Add new op new and op delete objs.
index 009de14..5c2344d 100644 (file)
@@ -558,7 +558,8 @@ expand_start_catch_block (declspecs, declarator)
      that contains this catch block.
 
      Matches the end in expand_end_catch_block.  */
-  expand_eh_region_start ();
+  if (! exceptions_via_longjmp)
+    expand_eh_region_start ();
 
   /* Create a binding level for the eh_info and the exception object
      cleanup.  */
@@ -667,10 +668,6 @@ expand_start_catch_block (declspecs, declarator)
 void
 expand_end_catch_block ()
 {
-  rtx start_region_label_rtx;
-  rtx end_region_label_rtx;
-  tree decls, t;
-
   if (! doing_eh (1))
     return;
 
@@ -684,13 +681,6 @@ expand_end_catch_block ()
   /* Cleanup the EH object.  */
   expand_end_bindings (getdecls (), kept_level_p (), 0);
   poplevel (kept_level_p (), 1, 0);
-      
-  t = make_node (RTL_EXPR);
-  TREE_TYPE (t) = void_type_node;
-  RTL_EXPR_RTL (t) = const0_rtx;
-  TREE_SIDE_EFFECTS (t) = 1;
-  do_pending_stack_adjust ();
-  start_sequence_for_rtl_expr (t);
 
   if (! exceptions_via_longjmp)
     {
@@ -698,15 +688,22 @@ expand_end_catch_block ()
         region around the whole catch block to skip through the
         terminate region we are nested in.  */
 
-      expand_internal_throw (DECL_RTL (top_label_entry (&caught_return_label_stack)));
-    }
+      tree t = make_node (RTL_EXPR);
+      TREE_TYPE (t) = void_type_node;
+      RTL_EXPR_RTL (t) = const0_rtx;
+      TREE_SIDE_EFFECTS (t) = 1;
+      do_pending_stack_adjust ();
+      start_sequence_for_rtl_expr (t);
 
-  do_pending_stack_adjust ();
-  RTL_EXPR_SEQUENCE (t) = get_insns ();
-  end_sequence ();
+      expand_internal_throw (outer_context_label_stack->u.rlabel);
 
-  /* For the rethrow region.  */
-  expand_eh_region_end (t);
+      do_pending_stack_adjust ();
+      RTL_EXPR_SEQUENCE (t) = get_insns ();
+      end_sequence ();
+
+      /* For the rethrow region.  */
+      expand_eh_region_end (t);
+    }
 
   /* Fall to outside the try statement when done executing handler and
      we fall off end of handler.  This is jump Lresume in the