https://gcc.gnu.org/g:fe050fa9d1249a7a528a30a499d1abc23f47f2c8
commit r16-7075-gfe050fa9d1249a7a528a30a499d1abc23f47f2c8 Author: Jan Hubicka <[email protected]> Date: Tue Jan 27 19:18:13 2026 +0100 Remove impossible speculation in ipa_polymorphic_call_context::possible_dynamic_type_change This patch makes ipa-cp dataflow monotone by making sure we do not use speculation that was proved to be impossible earlier. gcc/ChangeLog: PR ipa/123619 * ipa-polymorphic-call.cc (ipa_polymorphic_call_context::possible_dynamic_type_change): Remove impossible speuculation. Diff: --- gcc/ipa-polymorphic-call.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/ipa-polymorphic-call.cc b/gcc/ipa-polymorphic-call.cc index 243a2f13cdc8..5e53c217e33c 100644 --- a/gcc/ipa-polymorphic-call.cc +++ b/gcc/ipa-polymorphic-call.cc @@ -2363,7 +2363,18 @@ ipa_polymorphic_call_context::possible_dynamic_type_change (bool in_poly_cdtor, tree otr_type) { if (dynamic) - make_speculative (otr_type); + { + /* See if existing speculation was inconsistent before type change. + If so drop it first, so we do not lose track about it being + impossible. */ + if (speculative_outer_type + && !speculation_consistent_p (speculative_outer_type, + speculative_offset, + speculative_maybe_derived_type, + otr_type)) + clear_speculation (); + make_speculative (otr_type); + } else if (in_poly_cdtor) maybe_in_construction = true; }
