]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR tree-optimization/42704 (ICE in verify_ssa after early SRA)
authorMartin Jambor <mjambor@suse.cz>
Wed, 13 Jan 2010 18:47:19 +0000 (19:47 +0100)
committerMartin Jambor <jamborm@gcc.gnu.org>
Wed, 13 Jan 2010 18:47:19 +0000 (19:47 +0100)
2010-01-13  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/42704
* tree-sra.c (sra_modify_assign): Do not delete assignments to
SSA_NAMEs.

* testsuite/g++.dg/torture/pr42704.C: New test.

From-SVN: r155865

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/torture/pr42704.C [new file with mode: 0644]
gcc/tree-sra.c

index b8a4ec0008c04f905c4c37001998d4bc6cd8595d..0bf51b8ac90103597b112b89ee9dceb9bb21ccbd 100644 (file)
@@ -1,3 +1,9 @@
+2010-01-13  Martin Jambor  <mjambor@suse.cz>
+
+       PR tree-optimization/42704
+       * tree-sra.c (sra_modify_assign): Do not delete assignments to
+       SSA_NAMEs.
+
 2010-01-13  Martin Jambor  <mjambor@suse.cz>
 
        PR tree-optimization/42703
index 148ba87203dffd64f07384f989e51788c9ca7b10..5bce27b598bccc049b045b187b1597a13b9641ec 100644 (file)
@@ -1,7 +1,12 @@
+2010-01-13  Martin Jambor  <mjambor@suse.cz>
+
+       PR tree-optimization/42704
+       * g++.dg/torture/pr42704.C: New test.
+
 2010-01-13  Martin Jambor  <mjambor@suse.cz>
 
        PR tree-optimization/42703
-       * testsuite/gcc.c-torture/compile/pr42703.c: New test.
+       * gcc.c-torture/compile/pr42703.c: New test.
 
 2010-01-13  Richard Guenther  <rguenther@suse.de>
 
diff --git a/gcc/testsuite/g++.dg/torture/pr42704.C b/gcc/testsuite/g++.dg/torture/pr42704.C
new file mode 100644 (file)
index 0000000..735b1e7
--- /dev/null
@@ -0,0 +1,44 @@
+/* { dg-do compile } */
+
+typedef int PRInt32;
+class nsTreeRows {
+    class Subtree { };
+    enum { kMaxDepth = 32 };
+    struct Link {
+        Subtree* mParent;
+        PRInt32 mChildIndex;
+        Link&         operator=(const Link& aLink) {
+            mParent = aLink.mParent;
+            mChildIndex = aLink.mChildIndex;
+        }
+    };
+    class iterator {
+        PRInt32 mTop;
+        PRInt32 mRowIndex;
+        Link mLink[kMaxDepth];
+    public:
+        iterator() : mTop(-1), mRowIndex(-1) { }
+        iterator& operator=(const iterator& aIterator);
+    };
+    Subtree*     EnsureSubtreeFor(Subtree* aParent, PRInt32 aChildIndex);
+    Subtree*     GetSubtreeFor(const Subtree* aParent,
+PRInt32 aChildIndex,                   PRInt32* aSubtreeSize = 0);
+    void     InvalidateCachedRow() {
+        mLastRow = iterator();
+    }
+    iterator mLastRow;
+};
+nsTreeRows::Subtree* nsTreeRows::EnsureSubtreeFor(Subtree* aParent,
+                     PRInt32 aChildIndex) {
+    Subtree* subtree = GetSubtreeFor(aParent, aChildIndex);
+    if (! subtree) {
+        InvalidateCachedRow();
+    }
+}
+nsTreeRows::iterator& nsTreeRows::iterator::operator=(const iterator&
+aIterator) {
+    mTop = aIterator.mTop;
+    for (PRInt32 i = mTop;
+         i >= 0;
+         --i)         mLink[i] = aIterator.mLink[i];
+}
index 38b3cf507e06ebab5d458b88f2c0c96ef75d58aa..e9766d78a54e92e7923f1bc514147068155cc9ee 100644 (file)
@@ -2533,7 +2533,9 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi,
        {
          if (access_has_children_p (racc))
            {
-             if (!racc->grp_unscalarized_data)
+             if (!racc->grp_unscalarized_data
+                 /* Do not remove SSA name definitions (PR 42704).  */
+                 && TREE_CODE (lhs) != SSA_NAME)
                {
                  generate_subtree_copies (racc->first_child, lhs,
                                           racc->offset, 0, 0, gsi,