https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107485
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- Note that while this might be part of the solution we then still "wreck" EH anyway by throwing it away instead of trying to replicate it for each component compare. So I'm not sure the proposed change is an improvement. See the comment in expand_vector_operations which says /* ??? If we do not cleanup EH then we will ICE in verification. But in reality we have created wrong-code as we did not properly transition EH info and edges to the piecewise computations. */ if (maybe_clean_eh_stmt (gsi_stmt (gsi)) && gimple_purge_dead_eh_edges (bb)) cfg_changed = true; that basically says we don't support -fnon-call-exceptions for generic vector code. Maybe it wouldn't be too difficult to do it correctly but most definitely we don't do it. Confirmed also on x86_64. Note the issue in the PR is that we have a scalar condition with a vector value. That's not supposed to be a VEC_COND_EXPR, it's a COND_EXPR! Interestingly the scalar condition appears as part of inlining f(), the code if (gassign *ass = dyn_cast <gassign *> (copy)) if ((gimple_assign_rhs_code (ass) == COND_EXPR || gimple_assign_rhs_code (ass) == VEC_COND_EXPR) && gimple_could_trap_p (ass)) { gassign *cmp = gimple_build_assign (make_ssa_name (boolean_type_node), gimple_assign_rhs1 (ass)); gimple_seq_add_stmt (&stmts, cmp); gimple_assign_set_rhs1 (ass, gimple_assign_lhs (cmp)); } is wrong.