except.c (expand_start_all_catch): If the machine needs a nonlocal_goto_receiver...
authorMike Stump <mrs@gcc.gnu.org>
Tue, 13 May 1997 03:50:39 +0000 (03:50 +0000)
committerMike Stump <mrs@gcc.gnu.org>
Tue, 13 May 1997 03:50:39 +0000 (03:50 +0000)
* except.c (expand_start_all_catch): If the machine needs a
nonlocal_goto_receiver, add one at the start of the exception
handler.
(expand_leftover_cleanups): Likewise.
Potential fix for eh on alpha, rs6000, and hppa.

From-SVN: r14060

gcc/except.c

index 91afbc3..225b656 100644 (file)
@@ -1159,6 +1159,12 @@ expand_leftover_cleanups ()
       /* Output the label for the start of the exception handler.  */
       emit_label (entry->exception_handler_label);
 
+#ifdef HAVE_nonlocal_goto_receiver
+      if (! exceptions_via_longjmp)
+       if (HAVE_nonlocal_goto_receiver)
+         emit_insn (gen_nonlocal_goto_receiver ());
+#endif
+
       /* And now generate the insns for the handler.  */
       expand_expr (entry->finalization, const0_rtx, VOIDmode, 0);
 
@@ -1252,6 +1258,12 @@ expand_start_all_catch ()
         end up being the handler.  */
       emit_label (entry->exception_handler_label);
 
+#ifdef HAVE_nonlocal_goto_receiver
+      if (! exceptions_via_longjmp)
+       if (HAVE_nonlocal_goto_receiver)
+         emit_insn (gen_nonlocal_goto_receiver ());
+#endif
+
       /* When we get down to the matching entry for this try block, stop.  */
       if (entry->finalization == integer_zero_node)
        {