https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112406
--- Comment #15 from Robin Dapp <rdapp at gcc dot gnu.org> --- Hmm, that's definitely related to the original change but most likely not to the fixes. gcc_assert (code == IFN_COND_ADD || code == IFN_COND_SUB || code == IFN_COND_MUL || code == IFN_COND_AND || code == IFN_COND_IOR || code == IFN_COND_XOR); gcc_assert (op.num_ops == 4 && (op.ops[1] == op.ops[3])); The second assert fails and op.num_ops must be correct because of the first assert. Maybe, via LTO, we somehow propagate a constant into the else or so? I just noticed that since we now have the internal_fn_else_index, we could use this here as well for clarity.