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