On Sun, Dec 9, 2012 at 5:17 PM, NightStrike <nightstr...@gmail.com> wrote: > On Sat, Dec 1, 2012 at 12:28 PM, Steven Bosscher <stevenb....@gmail.com> > wrote: >> 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 > > Ping.
Ok. Thanks, Richard.