From: Andrew MacLeod Date: Tue, 22 Apr 2025 17:52:45 +0000 (-0400) Subject: Do not overwrite relation in range_of_range_op. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b89c6f801be1c1d94833aeda75570ba4892cf261;p=thirdparty%2Fgcc.git 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 --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc index 3bb24d58940..aed5c7dc21e 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