aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2006-01-23 15:19:29 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2006-01-23 07:19:29 -0800
commite9901f8b5664ad2ed996beff64d1c1bc4bea0bda (patch)
tree10cd798c994a5053a46eb9a6e374cd7fb29eea06
parent6e7a4706fdf5641516cd85b20d5ac9070a348e15 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/opt/pr25857.C18
-rw-r--r--gcc/tree-ssa-pre.c4
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));