https://gcc.gnu.org/g:b89c6f801be1c1d94833aeda75570ba4892cf261

commit r16-247-gb89c6f801be1c1d94833aeda75570ba4892cf261
Author: Andrew MacLeod <amacl...@redhat.com>
Date:   Tue Apr 22 13:52:45 2025 -0400

    Do not overwrite relation in range_of_range_op.
    
    when registering reltions between the lhs and op1/op2, the relation
    between op1 and op2 is being overwritten by the result.  This could
    result in either an incorrect relation being registered between lhs and op2,
    or a correct relation not being recognized.
    
            * gimple-range-fold.cc (fold_using_range::range_of_range_op): Use a
            new local variable for intermediate relation results.

Diff:
---
 gcc/gimple-range-fold.cc | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc
index 3bb24d58940f..aed5c7dc21eb 100644
--- a/gcc/gimple-range-fold.cc
+++ b/gcc/gimple-range-fold.cc
@@ -759,15 +759,17 @@ fold_using_range::range_of_range_op (vrange &r,
                }
              if (gimple_range_ssa_p (op1))
                {
-                 rel = handler.lhs_op1_relation (r, range1, range2, rel);
-                 if (rel != VREL_VARYING)
-                   src.register_relation (s, rel, lhs, op1);
+                 relation_kind rel2 = handler.lhs_op1_relation (r, range1,
+                                                                range2, rel);
+                 if (rel2 != VREL_VARYING)
+                   src.register_relation (s, rel2, lhs, op1);
                }
              if (gimple_range_ssa_p (op2))
                {
-                 rel = handler.lhs_op2_relation (r, range1, range2, rel);
-                 if (rel != VREL_VARYING)
-                   src.register_relation (s, rel, lhs, op2);
+                 relation_kind rel2 = handler.lhs_op2_relation (r, range1,
+                                                                range2, rel);
+                 if (rel2 != VREL_VARYING)
+                   src.register_relation (s, rel2, lhs, op2);
                }
            }
          // Check for an existing BB, as we maybe asked to fold an

Reply via email to