PR tree-optimization/51596
* tree-cfg.c (replace_uses_by): Call gimple_purge_dead_eh_edges
when needed.
* g++.dg/opt/pr51596.C: New test.
From-SVN: r182481
2011-12-19 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/51596
+ * tree-cfg.c (replace_uses_by): Call gimple_purge_dead_eh_edges
+ when needed.
+
PR middle-end/51590
PR tree-optimization/51606
* tree-vect-patterns.c (append_pattern_def_seq, new_pattern_def_seq):
2011-12-19 Jakub Jelinek <jakub@redhat.com>
+ PR tree-optimization/51596
+ * g++.dg/opt/pr51596.C: New test.
+
PR middle-end/51590
PR tree-optimization/51606
* gcc.dg/vect/pr51590.c: New test.
--- /dev/null
+// PR tree-optimization/51596
+// { dg-do compile }
+// { dg-options "-O -fnon-call-exceptions" }
+
+struct A { float v[2]; };
+struct B { int v[2]; };
+
+struct C
+{
+ B c;
+ C f ()
+ {
+ B b;
+ for (int i = 0; i < 2; i++)
+ b.v[i] = c.v[i];
+ return *this;
+ }
+};
+
+struct D
+{
+ A d;
+ D (B x)
+ {
+ for (int i = 0; i < 2; i++)
+ d.v[i] = x.v[i];
+ }
+};
+
+int bar ();
+
+C i;
+
+void
+foo ()
+{
+ while (bar ())
+ D (i.f ().c);
+}
if (fold_stmt (&gsi))
stmt = gsi_stmt (gsi);
- maybe_clean_or_replace_eh_stmt (orig_stmt, stmt);
+ if (maybe_clean_or_replace_eh_stmt (orig_stmt, stmt))
+ gimple_purge_dead_eh_edges (gimple_bb (stmt));
update_stmt (stmt);
}