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.
This commit is contained in:
Jan Hubicka
2026-01-27 19:18:13 +01:00
parent 0e240e22ce
commit fe050fa9d1

View File

@@ -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;
}