https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93166
--- Comment #2 from Martin Jambor <jamborm at gcc dot gnu.org> --- I have analyzed this ICE and came to the conclusion that the assert is wrong for polymorphic context lattices - e.g. in the reported case we always pass the same class to first parameter, which in the recursive call then serves as a basis to ancestor JF for the second parameter. When propagating polymorphic contexts within SCCs we allow creating new values because for any sane input their number will be limited by class hierarchy (and potential insane input limited by param_ipa_cp_value_list_size). I think that is OK too. So we can either simply remove the assert or make it active only for tree lattices. At the moment I'd prefer the former, but Feng, if this assert proved valuable in development the recursive function versioning patch, I'll be happy to keep it. What do you think?