From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1011) id C5E923858D3C; Mon, 8 Nov 2021 17:49:13 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C5E923858D3C 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-5006] Don't calculate new values when using the private context callback. X-Act-Checkin: gcc X-Git-Author: Andrew MacLeod X-Git-Refname: refs/heads/master X-Git-Oldrev: 33a7a63275c959f97b25064cfbe3e7f0dc7f7e9c X-Git-Newrev: 0cd653bd2559701da9cc4c9bf51f22bdd68623b5 Message-Id: <20211108174913.C5E923858D3C@sourceware.org> Date: Mon, 8 Nov 2021 17:49:13 +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, 08 Nov 2021 17:49:13 -0000 https://gcc.gnu.org/g:0cd653bd2559701da9cc4c9bf51f22bdd68623b5 commit r12-5006-g0cd653bd2559701da9cc4c9bf51f22bdd68623b5 Author: Andrew MacLeod Date: Mon Nov 8 09:32:42 2021 -0500 Don't calculate new values when using the private context callback. When using rangers private callback mechanism to provide context to fold_stmt calls, we are only suppose to be using the cache in read only mode, never calculate new values. gcc/ PR tree-optimization/103122 * gimple-range.cc (gimple_ranger::range_of_expr): Request the cache entry with "calulate new values" set to false. gcc/testsuite/ * g++.dg/pr103122.C: New. Diff: --- gcc/gimple-range.cc | 4 ++-- gcc/testsuite/g++.dg/pr103122.C | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc index e1177b1c5e8..87dba6e81d8 100644 --- a/gcc/gimple-range.cc +++ b/gcc/gimple-range.cc @@ -88,8 +88,8 @@ gimple_ranger::range_of_expr (irange &r, tree expr, gimple *stmt) if (!m_cache.get_global_range (r, expr)) r = gimple_range_global (expr); // Pick up implied context information from the on-entry cache - // if current_bb is set. - if (current_bb && m_cache.block_range (tmp, current_bb, expr)) + // if current_bb is set. Do not attempt any new calculations. + if (current_bb && m_cache.block_range (tmp, current_bb, expr, false)) { r.intersect (tmp); char str[80]; diff --git a/gcc/testsuite/g++.dg/pr103122.C b/gcc/testsuite/g++.dg/pr103122.C new file mode 100644 index 00000000000..3465eade46b --- /dev/null +++ b/gcc/testsuite/g++.dg/pr103122.C @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +unsigned a; +int b; +short c; +void d(long) { + for (bool e = (bool)c - 1; e < (bool)b - 1; e += 0) + ; + if (a) { + for (char f = 0; f < 7; f = 7) + for (int g = 0; g < c; g += 10) + ; + d(-!c); + } +}