re PR tree-optimization/51596 (ICE: verify_flow_info failed: BB 6 can not throw but has an EH edge with -fnon-call-exceptions)
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
This commit is contained in:
parent
083481d85c
commit
77753f4dae
|
@ -1,5 +1,9 @@
|
|||
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):
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
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.
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
// 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);
|
||||
}
|
|
@ -1627,7 +1627,8 @@ replace_uses_by (tree name, tree val)
|
|||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue