aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Berlin <dberlin@dberlin.org>2006-01-13 16:00:13 +0000
committerDaniel Berlin <dberlin@gcc.gnu.org>2006-01-13 16:00:13 +0000
commitaa4b71172e97ace10387de90ac6aee72381dc6f0 (patch)
treee61cc80ff03aedc183ea12bb3869e159392b1a20
parent22918034f8e5ff75c20da27f988301b23a531975 (diff)
downloadgcc-aa4b71172e97ace10387de90ac6aee72381dc6f0.zip
gcc-aa4b71172e97ace10387de90ac6aee72381dc6f0.tar.gz
gcc-aa4b71172e97ace10387de90ac6aee72381dc6f0.tar.bz2
re PR tree-optimization/25771 (ice in coalesce_abnormal_edges, at tree-outof-ssa.c:621)
2006-01-13 Daniel Berlin <dberlin@dberlin.org> PR tree-optimization/25771 * tree-ssa-pre.c (insert_extra_phis): Don't insert merges of abnormal SSA_NAMES. From-SVN: r109669
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr25771.C32
-rw-r--r--gcc/tree-ssa-pre.c3
4 files changed, 46 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 42e8a7a..6d2d109 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-01-13 Daniel Berlin <dberlin@dberlin.org>
+
+ PR tree-optimization/25771
+ * tree-ssa-pre.c (insert_extra_phis): Don't insert merges of abnormal
+ SSA_NAMES.
+
2006-01-13 Andrew Pinski <pinskia@physics.uc.edu>
PR tree-opt/24365
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 593db14..1a59f59 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-01-13 Daniel Berlin <dberlin@dberlin.org>
+
+ PR tree-optimization/25771
+ * g++.dg/tree-ssa/pr25771.C: New test
+
2006-01-13 Andrew Pinski <pinskia@physics.uc.edu>
PR tree-opt/24365
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr25771.C b/gcc/testsuite/g++.dg/tree-ssa/pr25771.C
new file mode 100644
index 0000000..e9e5336
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr25771.C
@@ -0,0 +1,32 @@
+int ggggg();
+struct string {
+ static int _S_empty_rep_storage[];
+ void _M_destroy();
+ char* _M_rep;
+ ~string()
+ {
+ if (_M_rep != (char*)&_S_empty_rep_storage )
+ if (ggggg() <= 0)
+ _M_destroy();
+ }
+};
+extern void SDL_FreeSurface(int surface);
+struct scoped_resource {
+ ~scoped_resource() {
+ SDL_FreeSurface(1);
+ }
+};
+struct surface {
+ scoped_resource surface_;
+};
+struct button {
+ string help_text_;
+ string label_;
+ surface image_;
+};
+struct scrollbar {
+ string help_text_;
+ button uparrow_;
+};
+scrollbar a;
+
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index bf3e524..ada654b 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -2768,6 +2768,9 @@ insert_extra_phis (basic_block block, basic_block dom)
tree val = get_value_handle (name);
tree temp;
+ if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (name))
+ continue;
+
if (!mergephitemp
|| TREE_TYPE (name) != TREE_TYPE (mergephitemp))
{