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