On Sat, Dec 1, 2012 at 10:59 PM, Kai Tietz wrote:
> Hi,
>
> recent 4,8 has regressions in g++.old-deja/g++.eh for the catch*.C
> tests, if exception-mechanism is SjLj.  This is due an off by one
> failure in an decreasing loop.
>
> ChangeLog
>
> 2012-12-01  Kai Tietz
>
>         * stmt.c (expand_sjlj_dispatch_table): Fix off by one.
>
> Tested for i686-w64-mingw32, x86_64-unknown-linux-gnu.  Ok for apply?
>
> Regards,
> Kai
>
>
> Index: stmt.c
> ===================================================================
> --- stmt.c      (Revision 193985)
> +++ stmt.c      (Arbeitskopie)
> @@ -2282,7 +2282,7 @@ expand_sjlj_dispatch_table (rtx dispatch_index,
>        tree range = maxval;
>        rtx default_label = gen_label_rtx ();
>
> -      for (int i = ncases - 1; i > 0; --i)
> +      for (int i = ncases - 1; i >= 0; --i)
>         {
>           tree elt = dispatch_table[i];
>           tree low = CASE_LOW (elt);


I can't approve this, but it's obvious. The "normal" switch expander
(expand_case) expects the default case in slot 0, but the SJLJ
dispatch table doesn't have a default case.

Ciao!
Steven

Reply via email to