From: Andrew MacLeod Date: Mon, 8 Nov 2021 14:32:42 +0000 (-0500) Subject: Don't calculate new values when using the private context callback. X-Git-Tag: basepoints/gcc-13~3307 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0cd653bd2559701da9cc4c9bf51f22bdd68623b5;p=thirdparty%2Fgcc.git 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 --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc index e1177b1c5e8f..87dba6e81d89 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 000000000000..3465eade46bd --- /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); + } +}