OSDN Git Service

* except.c (expand_start_all_catch): If the machine needs a
authormrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 May 1997 03:50:39 +0000 (03:50 +0000)
committermrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 May 1997 03:50:39 +0000 (03:50 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@14060 138bc75d-0d04-0410-961f-82ee72b054a4

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)
        {