OSDN Git Service

2010-01-13 Martin Jambor <mjambor@suse.cz>
authorjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Jan 2010 18:47:19 +0000 (18:47 +0000)
committerjamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 13 Jan 2010 18:47:19 +0000 (18:47 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155865 138bc75d-0d04-0410-961f-82ee72b054a4

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

index b8a4ec0..0bf51b8 100644 (file)
@@ -1,5 +1,11 @@
 2010-01-13  Martin Jambor  <mjambor@suse.cz>
 
 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
        * tree-sra.c (analyze_access_subtree): Check that we can build a
        reference to the original data within the aggregate.
        PR tree-optimization/42703
        * tree-sra.c (analyze_access_subtree): Check that we can build a
        reference to the original data within the aggregate.
index 148ba87..5bce27b 100644 (file)
@@ -1,7 +1,12 @@
 2010-01-13  Martin Jambor  <mjambor@suse.cz>
 
 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
        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>
 
 
 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 38b3cf5..e9766d7 100644 (file)
@@ -2533,7 +2533,9 @@ sra_modify_assign (gimple *stmt, gimple_stmt_iterator *gsi,
        {
          if (access_has_children_p (racc))
            {
        {
          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,
                {
                  generate_subtree_copies (racc->first_child, lhs,
                                           racc->offset, 0, 0, gsi,