diff options
author | Andrew Pinski <pinskia@physics.uc.edu> | 2006-01-23 15:19:29 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2006-01-23 07:19:29 -0800 |
commit | e9901f8b5664ad2ed996beff64d1c1bc4bea0bda (patch) | |
tree | 10cd798c994a5053a46eb9a6e374cd7fb29eea06 | |
parent | 6e7a4706fdf5641516cd85b20d5ac9070a348e15 (diff) | |
download | gcc-e9901f8b5664ad2ed996beff64d1c1bc4bea0bda.zip gcc-e9901f8b5664ad2ed996beff64d1c1bc4bea0bda.tar.gz gcc-e9901f8b5664ad2ed996beff64d1c1bc4bea0bda.tar.bz2 |
re PR tree-optimization/25315 (testsuite failure:27_io/basic_ostream/inserters_character/char/9555-oc.cc wchar_t/9555-oc.cc exec)
2006-01-23 Andrew Pinski <pinskia@physics.uc.edu>
Daniel Berlin <dberlin@dberlin.org>
PR tree-opt/25315
PR tree-opt/25857
* tree-ssa-pre.c (insert_extra_phis): If an incomming edge is abnormal
return from the function.
2006-01-23 Andrew Pinski <pinskia@physics.uc.edu>
PR tree-opt/25857
* g++.dg/opt/pr25857.C: New test.
Co-Authored-By: Daniel Berlin <dberlin@dberlin.org>
From-SVN: r110127
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr25857.C | 18 | ||||
-rw-r--r-- | gcc/tree-ssa-pre.c | 4 |
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eaaf2d8..2a85326 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2006-01-23 Andrew Pinski <pinskia@physics.uc.edu> + Daniel Berlin <dberlin@dberlin.org> + + PR tree-opt/25315 + PR tree-opt/25857 + * tree-ssa-pre.c (insert_extra_phis): If an incomming edge is abnormal + return from the function. + 2006-01-22 Zack Weinberg <zackw@panix.com> * rtl.def (match_code): Add second argument. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index eb289c6..461ad4c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-01-23 Andrew Pinski <pinskia@physics.uc.edu> + + PR tree-opt/25857 + * g++.dg/opt/pr25857.C: New test. + 2006-01-23 Steven Bosscher <stevenb.gcc@gmail.com> Jan Hubicka <jh@suse.cz> Richard Guenther <rguenther@suse.de> diff --git a/gcc/testsuite/g++.dg/opt/pr25857.C b/gcc/testsuite/g++.dg/opt/pr25857.C new file mode 100644 index 0000000..4e6858f --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr25857.C @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +int foo(); +int i; + +struct A +{ + ~A() { if (this != (A*)(&i)) foo(); } +}; + +struct B +{ + A a1, a2, a3, a4; + ~B() { foo(); } +}; + +B b; diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index ada654b..a695e90 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -2745,6 +2745,10 @@ insert_extra_phis (basic_block block, basic_block dom) FOR_EACH_EDGE (e, ei, block->preds) { + /* We cannot handle abnormal incomming edges correctly. */ + if (e->flags & EDGE_ABNORMAL) + return; + if (first) { bitmap_set_copy (tempset, AVAIL_OUT (e->src)); |