re PR tree-optimization/48772 (ICE: SIGSEGV in walk_non_aliased_vuses (gimple.h:1100) with -O -fnon-call-exceptions -fno-tree-ccp -fno-tree-dce)
2011-04-27 Richard Guenther <rguenther@suse.de> PR tree-optimization/48772 * tree-ssa-pre.c (eliminate): Update call stmts after elimination only. * g++.dg/pr48772.C: New testcase. From-SVN: r173019
This commit is contained in:
parent
f63d806d66
commit
9aef53ee4c
|
@ -1,3 +1,9 @@
|
|||
2011-04-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/48772
|
||||
* tree-ssa-pre.c (eliminate): Update call stmts after elimination
|
||||
only.
|
||||
|
||||
2011-04-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* tree-ssa-alias.c (indirect_refs_may_alias_p): Fix
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2011-04-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/48772
|
||||
* g++.dg/pr48772.C: New testcase.
|
||||
|
||||
2011-04-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/48742
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
// { dg-do compile }
|
||||
// { dg-options "-O -fnon-call-exceptions -fno-tree-ccp -fno-tree-dce" }
|
||||
|
||||
extern "C" void abort ();
|
||||
|
||||
struct A
|
||||
{
|
||||
void foo ()
|
||||
{
|
||||
this->bar ();
|
||||
}
|
||||
virtual void bar ()
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
~A ()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
struct B:A
|
||||
{
|
||||
virtual void bar ()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
B b;
|
||||
b.foo ();
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -4186,6 +4186,7 @@ static unsigned int
|
|||
eliminate (void)
|
||||
{
|
||||
VEC (gimple, heap) *to_remove = NULL;
|
||||
VEC (gimple, heap) *to_update = NULL;
|
||||
basic_block b;
|
||||
unsigned int todo = 0;
|
||||
gimple_stmt_iterator gsi;
|
||||
|
@ -4411,7 +4412,7 @@ eliminate (void)
|
|||
}
|
||||
|
||||
gimple_call_set_fn (stmt, fn);
|
||||
update_stmt (stmt);
|
||||
VEC_safe_push (gimple, heap, to_update, stmt);
|
||||
|
||||
/* When changing a call into a noreturn call, cfg cleanup
|
||||
is needed to fix up the noreturn call. */
|
||||
|
@ -4563,6 +4564,13 @@ eliminate (void)
|
|||
}
|
||||
VEC_free (gimple, heap, to_remove);
|
||||
|
||||
/* We cannot update call statements with virtual operands during
|
||||
SSA walk. This might remove them which in turn makes our
|
||||
VN lattice invalid. */
|
||||
FOR_EACH_VEC_ELT (gimple, to_update, i, stmt)
|
||||
update_stmt (stmt);
|
||||
VEC_free (gimple, heap, to_update);
|
||||
|
||||
return todo;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue