From: Jan Hubicka Date: Tue, 27 Jan 2026 18:18:13 +0000 (+0100) Subject: Remove impossible speculation in ipa_polymorphic_call_context::possible_dynamic_type_... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fe050fa9d1249a7a528a30a499d1abc23f47f2c8;p=thirdparty%2Fgcc.git 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 --git a/gcc/ipa-polymorphic-call.cc b/gcc/ipa-polymorphic-call.cc index 243a2f13cdc..5e53c217e33 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; }