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