https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114081
Tamar Christina <tnfchris at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |tnfchris at gcc dot gnu.org --- Comment #6 from Tamar Christina <tnfchris at gcc dot gnu.org> --- slightly cleaned up testcase --- typedef struct filter_list_entry { const char *name; int id; void (*function)(); } filter_list_entry; static const filter_list_entry filter_list[9] = {0}; void php_zval_filter(int filter, int id1) { filter_list_entry filter_func; int size = 9; for (int i = 0; i < size; ++i) { if (filter_list[i].id == filter) { filter_func = filter_list[i]; goto done; } } #pragma GCC novector for (int i = 0; i < size; ++i) { if (filter_list[i].id == 0x0204) { filter_func = filter_list[i]; goto done; } } done: if (!filter_func.id) filter_func.function(); } --- seems to happen because it's doing an inner loop vect with two loops that have early exits to the same destination. if (multiple_exits_p) { update_loop = new_loop; doms = get_all_dominated_blocks (CDI_DOMINATORS, loop->header); for (unsigned i = 0; i < doms.length (); ++i) if (flow_bb_inside_loop_p (loop, doms[i])) doms.unordered_remove (i); } was supposed to update the dominators but something goes wrong. Mine, but for monday..