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

Reply via email to