]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Do not overwrite relation in range_of_range_op.
authorAndrew MacLeod <amacleod@redhat.com>
Tue, 22 Apr 2025 17:52:45 +0000 (13:52 -0400)
committerAndrew MacLeod <amacleod@redhat.com>
Mon, 28 Apr 2025 21:17:30 +0000 (17:17 -0400)
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.

gcc/gimple-range-fold.cc

index 3bb24d58940f97ae26b41140778c9452c1896b54..aed5c7dc21eb05d0d4416178308bc957170c96b7 100644 (file)
@@ -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