diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc index 2885d0fa21e..ecd6039e0fd 100644 --- a/gcc/gimple-range.cc +++ b/gcc/gimple-range.cc @@ -546,7 +546,7 @@ gimple_ranger::update_stmt (gimple *s) // Re-calculate a new value using just cache values. Value_Range tmp (TREE_TYPE (lhs)); fold_using_range f; - fur_depend src (s, &(gori ()), &m_cache); + fur_stmt src (s, &m_cache); f.fold_stmt (tmp, s, src, lhs); // Combine the new value with the old value to check for a change. diff --git a/gcc/testsuite/gcc.dg/pr107523.c b/gcc/testsuite/gcc.dg/pr107523.c new file mode 100644 index 00000000000..1e5ed46c636 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr107523.c @@ -0,0 +1,32 @@ +/* { dg-do run } */ +/* { dg-options "-O2 " } */ + +int a, b = 1; +unsigned int c = 1; +int main() { + int d = 1, f; + if (b) + d = 0; + a = -1; + b = ~d ^ 465984011; + L1:; + if (b < 2) + f = b; + b = f; + if (f <= a) { + int g = -(a && 1), h = g - f && a, i = ~(c / f) && 1 % (a | h); + if (c) { + g = f; + if (i || (g && (g > -465984012))) + goto L2; + } + c = g | f / c; + } + if (0) + L2: + a = 0; + if (a <= c) + goto L1; + return 0; +} +