* rtl.h (LCT_THROW): New.
* calls.c (emit_library_call_value_1): Handle it.
* except.c (connect_post_landing_pads): Use it.
From-SVN: r41070
+2001-04-03 Richard Henderson <rth@redhat.com>
+
+ * rtl.h (LCT_THROW): New.
+ * calls.c (emit_library_call_value_1): Handle it.
+ * except.c (connect_post_landing_pads): Use it.
+
2001-04-03 Zack Weinberg <zackw@stanford.edu>
* gansidecl.h: Delete file.
#endif
#endif
- /* No library functions can throw. */
+ /* By default, library functions can not throw. */
flags = ECF_NOTHROW;
- if (fn_type == LCT_CONST_MAKE_BLOCK)
- flags |= ECF_CONST;
- else if (fn_type == LCT_PURE_MAKE_BLOCK)
- flags |= ECF_PURE;
- else if (fn_type == LCT_NORETURN)
- flags |= ECF_NORETURN;
+ switch (fn_type)
+ {
+ case LCT_NORMAL:
+ case LCT_CONST:
+ case LCT_PURE:
+ /* Nothing to do here. */
+ break;
+ case LCT_CONST_MAKE_BLOCK:
+ flags |= ECF_CONST;
+ break;
+ case LCT_PURE_MAKE_BLOCK:
+ flags |= ECF_PURE;
+ break;
+ case LCT_NORETURN:
+ flags |= ECF_NORETURN;
+ break;
+ case LCT_THROW:
+ flags = ECF_NORETURN;
+ break;
+ }
fun = orgfun;
#ifdef PREFERRED_STACK_BOUNDARY
if (outer)
emit_jump (outer->post_landing_pad);
else
- emit_library_call (unwind_resume_libfunc, LCT_NORETURN,
+ emit_library_call (unwind_resume_libfunc, LCT_THROW,
VOIDmode, 1, cfun->eh->exc_ptr, Pmode);
seq = get_insns ();
LCT_PURE = 2,
LCT_CONST_MAKE_BLOCK = 3,
LCT_PURE_MAKE_BLOCK = 4,
- LCT_NORETURN = 5
+ LCT_NORETURN = 5,
+ LCT_THROW = 6
};
extern void emit_library_call PARAMS ((rtx, enum libcall_type,