Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard. 2018-09-17 Richard Biener <rguent...@suse.de> PR tree-optimization/87301 * tree-ssa-sccvn.c (eliminate_dom_walker::eliminate_cleanup): Properly clean EH info from leftover copy assignments. * gcc.dg/torture/pr87301.c: New testcase. Index: gcc/tree-ssa-sccvn.c =================================================================== --- gcc/tree-ssa-sccvn.c (revision 264357) +++ gcc/tree-ssa-sccvn.c (working copy) @@ -5461,7 +5461,10 @@ eliminate_dom_walker::eliminate_cleanup if (is_gimple_assign (stmt)) { gimple_assign_set_rhs_from_tree (&gsi, sprime); - update_stmt (gsi_stmt (gsi)); + stmt = gsi_stmt (gsi); + update_stmt (stmt); + if (maybe_clean_or_replace_eh_stmt (stmt, stmt)) + bitmap_set_bit (need_eh_cleanup, gimple_bb (stmt)->index); continue; } else Index: gcc/testsuite/gcc.dg/torture/pr87301.c =================================================================== --- gcc/testsuite/gcc.dg/torture/pr87301.c (nonexistent) +++ gcc/testsuite/gcc.dg/torture/pr87301.c (working copy) @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-Wno-div-by-zero" } */ + +void +bl (int *be) +{ + int lo; + { + int **ny; + + if (*be == 0) + { + int ***k8 = &ny; + int uj = (__INTPTR_TYPE__)&lo; + + for (;;) + if (***k8 == 0) + { + uj = !!(1 / 0) ? !(lo = 0) : 0; + (void) uj; + + if (*ny == 0) + for (;;) + if (***k8 == 0) + { + } + + for (lo = 0; lo < 2; ++lo) + { + } + } + } + } +}