diff --git a/gcc/testsuite/gcc.dg/pr108819.c b/gcc/testsuite/gcc.dg/pr108819.c new file mode 100644 index 00000000000..28fa558b260 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr108819.c @@ -0,0 +1,19 @@ +/* PR tree-optimization/108819 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fno-tree-ccp -fno-tree-forwprop" } */ + +int a, b; + +int +main () +{ + int d = 1; + for (; b; b++) + if (a < 1) + while (d <= a && a <= 0UL) + { + int *e = &d; + *e = 0; + } + return 0; +} diff --git a/gcc/tree-ssa-reassoc.cc b/gcc/tree-ssa-reassoc.cc index f163612f140..8fd22591f55 100644 --- a/gcc/tree-ssa-reassoc.cc +++ b/gcc/tree-ssa-reassoc.cc @@ -4687,6 +4687,9 @@ update_ops (tree var, enum tree_code code, const vec &ops, gimple_set_uid (g, gimple_uid (stmt)); gimple_set_visited (g, true); gsi_insert_before (&gsi, g, GSI_SAME_STMT); + gimple_stmt_iterator gsi2 = gsi_for_stmt (g); + if (fold_stmt_inplace (&gsi2)) + update_stmt (g); } return var; }