summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/except.c
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2001-03-19 19:46:16 +0000
committerobrien <obrien@FreeBSD.org>2001-03-19 19:46:16 +0000
commitbc8a8f48cfcb338f87ffb41c0118266b64afac5e (patch)
tree1d10a707b70b41288bc2e01769c41f4d3baa7704 /contrib/gcc/except.c
parentc67d59390e4485092d22ef31e9279cd03761aae8 (diff)
downloadFreeBSD-src-bc8a8f48cfcb338f87ffb41c0118266b64afac5e.zip
FreeBSD-src-bc8a8f48cfcb338f87ffb41c0118266b64afac5e.tar.gz
Virgin import of the GCC 2.95.3 compilers
Diffstat (limited to 'contrib/gcc/except.c')
-rw-r--r--contrib/gcc/except.c57
1 files changed, 19 insertions, 38 deletions
diff --git a/contrib/gcc/except.c b/contrib/gcc/except.c
index cc6fc29..f7d78d6 100644
--- a/contrib/gcc/except.c
+++ b/contrib/gcc/except.c
@@ -723,42 +723,22 @@ static void
receive_exception_label (handler_label)
rtx handler_label;
{
- rtx around_label = NULL_RTX;
-
- if (! flag_new_exceptions || exceptions_via_longjmp)
- {
- around_label = gen_label_rtx ();
- emit_jump (around_label);
- emit_barrier ();
- }
-
emit_label (handler_label);
- if (! exceptions_via_longjmp)
- {
#ifdef HAVE_exception_receiver
- if (HAVE_exception_receiver)
- emit_insn (gen_exception_receiver ());
- else
+ if (! exceptions_via_longjmp)
+ if (HAVE_exception_receiver)
+ emit_insn (gen_exception_receiver ());
#endif
+
#ifdef HAVE_nonlocal_goto_receiver
- if (HAVE_nonlocal_goto_receiver)
- emit_insn (gen_nonlocal_goto_receiver ());
- else
-#endif
- { /* Nothing */ }
- }
- else
- {
-#ifndef DONT_USE_BUILTIN_SETJMP
- expand_builtin_setjmp_receiver (handler_label);
+ if (! exceptions_via_longjmp)
+ if (HAVE_nonlocal_goto_receiver)
+ emit_insn (gen_nonlocal_goto_receiver ());
#endif
- }
-
- if (around_label)
- emit_label (around_label);
}
+
struct func_eh_entry
{
int range_number; /* EH region number from EH NOTE insn's */
@@ -1340,7 +1320,7 @@ static void
start_dynamic_handler ()
{
rtx dhc, dcc;
- rtx arg, buf;
+ rtx x, arg, buf;
int size;
#ifndef DONT_USE_BUILTIN_SETJMP
@@ -1382,17 +1362,18 @@ start_dynamic_handler ()
buf = plus_constant (XEXP (arg, 0), GET_MODE_SIZE (Pmode)*2);
#ifdef DONT_USE_BUILTIN_SETJMP
+ x = emit_library_call_value (setjmp_libfunc, NULL_RTX, 1, SImode, 1,
+ buf, Pmode);
+ /* If we come back here for a catch, transfer control to the handler. */
+ jumpif_rtx (x, ehstack.top->entry->exception_handler_label);
+#else
{
- rtx x;
- x = emit_library_call_value (setjmp_libfunc, NULL_RTX, LCT_CONST,
- TYPE_MODE (integer_type_node), 1,
- buf, Pmode);
- /* If we come back here for a catch, transfer control to the handler. */
- jumpif_rtx (x, ehstack.top->entry->exception_handler_label);
+ /* A label to continue execution for the no exception case. */
+ rtx noex = gen_label_rtx();
+ x = expand_builtin_setjmp (buf, NULL_RTX, noex,
+ ehstack.top->entry->exception_handler_label);
+ emit_label (noex);
}
-#else
- expand_builtin_setjmp_setup (buf,
- ehstack.top->entry->exception_handler_label);
#endif
/* We are committed to this, so update the handler chain. */
OpenPOWER on IntegriCloud