https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88107
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2018-11-20 Target Milestone|--- |9.0 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. It looks like there's no "outer" region commoning things in general so find_outermost_region_in_block / eh_region_outermost is misdesigned. The EH "tree" looks like (gdb) p debug_eh_tree (ifun) Eh tree: 17 must_not_throw 16 must_not_throw 15 must_not_throw 14 must_not_throw 13 must_not_throw 12 must_not_throw 11 must_not_throw 10 must_not_throw 8 must_not_throw 7 must_not_throw 6 must_not_throw 5 must_not_throw 4 must_not_throw 3 must_not_throw 2 must_not_throw 1 must_not_throw $20 = void where the fns region_"tree"s root has only next_peer()s. So the design of outlining part of an EH tree is bogus.