https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106809
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- Oh, and the dominated_by_p_w_unex issue is that we do if (succe && EDGE_COUNT (succe->dest->preds) == 1) { /* Verify the reached block is only reached through succe. If there is only one edge we can spare us the dominator check and iterate directly. */ if (EDGE_COUNT (succe->dest->preds) > 1) { FOR_EACH_EDGE (e, ei, succe->dest->preds) if (e != succe && ((e->flags & EDGE_EXECUTABLE) || (!allow_back && (e->flags & EDGE_DFS_BACK)))) { succe = NULL; break; } where this is problematic because in the testcase with the switch stmt we have 1000s of incoming edges into succe->dest. I'm testing an easy workaround for the testcase and the original case from bison. A more general fix requires some more work.