This is the mail archive of the
mailing list for the GCC project.
Re: What do do with the exceptional case of expand_case for SJLJ exceptions
- From: Steven Bosscher <stevenb dot gcc at gmail dot com>
- To: Richard Henderson <rth at redhat dot com>
- Cc: Jan Hubicka <hubicka at ucw dot cz>, Richard Guenther <richard dot guenther at gmail dot com>, GCC Mailing List <gcc at gcc dot gnu dot org>
- Date: Sat, 12 May 2012 15:00:48 +0200
- Subject: Re: What do do with the exceptional case of expand_case for SJLJ exceptions
- References: <CABu31nMg0zBJCN2-jSfM_C8SOnPoOJyGBvJqu_=B=a53eOD0firstname.lastname@example.org> <CAFiYyc1g2h_CtkWQYLtU=+RCz26XWH5VLTmELG0hgxoVzaWEqw@mail.gmail.com> <20120418103928.GB5160@atrey.karlin.mff.cuni.cz> <4F8EB726.email@example.com>
On Wed, Apr 18, 2012 at 2:44 PM, Richard Henderson <firstname.lastname@example.org> wrote:
> On 04/18/2012 05:39 AM, Jan Hubicka wrote:
>> Well, if SJLJ lowering happens as gimple pass somewhere near the end of gimple
>> queue, this should not be problem at all. (and implementation would be cleaner)
> If you can find a clean way of separating sjlj expansion from dw2 expansion,
> please do. ?But there's a lot of code shared between the two. ?I see nothing
> wrong with always expanding via tablejump.
In that case, would something like the following patch be acceptable?
I have verified that all targets that always set
TARGET_EXCEPT_UNWIND_INFO define casesi and/or tablejump.
* toplev.c (process_options): Fail for sjlj exceptions if the
has no casesi insn and no tablejump insn.
--- toplev.c (revision 187394)
+++ toplev.c (working copy)
@@ -1265,6 +1265,16 @@ process_options (void)
+#if !defined(HAVE_casesi) && !defined(HAVE_tablejump)
+ if (flag_exceptions
+ && targetm_common.except_unwind_info (&global_options) == UI_SJLJ)
+ sorry ("setjmp/longjmp-based exception handling not supported "
+ "on this target machine "
+ "(required %<casesi%> or %<tablejump%> insns are not present)");
if (flag_mudflap && flag_lto)
sorry ("mudflap cannot be used together with link-time optimization");