From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1011) id 9E20A3861C5A; Mon, 12 Jul 2021 23:41:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9E20A3861C5A MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Andrew Macleod To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-2262] Add relation processing to ubsan builtins. X-Act-Checkin: gcc X-Git-Author: Andrew MacLeod X-Git-Refname: refs/heads/master X-Git-Oldrev: e61afa0c2fb633b037368c067d4744c07349a2eb X-Git-Newrev: 9693ecdf7ed5dde9618d06560697ff8ee5e1e6b7 Message-Id: <20210712234142.9E20A3861C5A@sourceware.org> Date: Mon, 12 Jul 2021 23:41:42 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Jul 2021 23:41:42 -0000 https://gcc.gnu.org/g:9693ecdf7ed5dde9618d06560697ff8ee5e1e6b7 commit r12-2262-g9693ecdf7ed5dde9618d06560697ff8ee5e1e6b7 Author: Andrew MacLeod Date: Mon Jul 12 14:38:42 2021 -0400 Add relation processing to ubsan builtins. Ubsan builtins call the plus/minus/multiple fold routines, but did not use any relation information between the 2 operands that is available. query and pass any relations. This resolves gcc.dg/pr97505.c when operating in ranger-only mode. * gimple-range-fold.cc (fold_using_range::range_of_builtin_ubsan_call): Query relation between the 2 operands and use it. Diff: --- gcc/gimple-range-fold.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc index 1fa4ace32b9..eff5d1f89f2 100644 --- a/gcc/gimple-range-fold.cc +++ b/gcc/gimple-range-fold.cc @@ -825,12 +825,14 @@ fold_using_range::range_of_builtin_ubsan_call (irange &r, gcall *call, tree arg1 = gimple_call_arg (call, 1); src.get_operand (ir0, arg0); src.get_operand (ir1, arg1); + // Check for any relation between arg0 and arg1. + relation_kind relation = src.query_relation (arg0, arg1); bool saved_flag_wrapv = flag_wrapv; // Pretend the arithmetic is wrapping. If there is any overflow, // we'll complain, but will actually do wrapping operation. flag_wrapv = 1; - op->fold_range (r, type, ir0, ir1); + op->fold_range (r, type, ir0, ir1, relation); flag_wrapv = saved_flag_wrapv; // If for both arguments vrp_valueize returned non-NULL, this should