re PR tree-optimization/27548 (ICE: SSA corruption - Conflict across an abnormal...
authorJakub Jelinek <jakub@redhat.com>
Wed, 17 May 2006 15:29:18 +0000 (17:29 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 17 May 2006 15:29:18 +0000 (17:29 +0200)
PR tree-optimization/27548
* g++.dg/tree-ssa/pr27548.C: New test.

From-SVN: r113864

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-ssa/pr27548.C [new file with mode: 0644]

index 5bd9189f676c379648597e348e66d31a3af326d6..3fe62f4c58f748cc0397616cf5d827da006b5195 100644 (file)
@@ -1,3 +1,8 @@
+2006-05-17  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/27548
+       * g++.dg/tree-ssa/pr27548.C: New test.
+
 2006-05-17  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        PR fortran/26551
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr27548.C b/gcc/testsuite/g++.dg/tree-ssa/pr27548.C
new file mode 100644 (file)
index 0000000..d23b959
--- /dev/null
@@ -0,0 +1,60 @@
+// PR tree-optimization/27548
+// { dg-do compile }
+// { dg-options "-O1" }
+
+namespace Gambit
+{
+  template < class T > class Array
+  {
+  protected:int mindex, maxdex;
+    T *data;
+    int InsertAt (const T & t, int n)
+    {
+      T *new_data = new T[++this->maxdex - this->mindex + 1] - this->mindex;
+      int i;
+      for (i = this->mindex; i <= n - 1; i++)
+         new_data[i] = this->data[i];
+       new_data[i++] = t;
+    }
+  public:   Array (unsigned int len = 0):mindex (1), maxdex (len),
+      data ((len) ? new T[len] -
+           1 : 0)
+    {
+    }
+    virtual ~ Array ()
+    {
+      if (maxdex >= mindex)
+       delete[](data + mindex);
+    }
+    const T & operator[] (int index) const
+    {
+    }
+    int Append (const T & t)
+    {
+      return InsertAt (t, this->maxdex + 1);
+    }
+  };
+}
+
+class gIndexOdometer
+{
+private:Gambit::Array < int >MinIndices;
+    Gambit::Array < int >CurIndices;
+    gIndexOdometer (const Gambit::Array < int >, const Gambit::Array < int >);
+  void SetIndex (const int &, const int &);
+  int NoIndices () const;
+  gIndexOdometer AfterExcisionOf (int &) const;
+};
+gIndexOdometer
+gIndexOdometer::AfterExcisionOf (int &to_be_zapped) const
+{
+  Gambit::Array < int >NewMins, NewMaxs;
+  int i;
+  for (i = 1; i <= NoIndices (); i++)
+    {
+      NewMins.Append (MinIndices[i]);
+    }
+  gIndexOdometer NewOdo (NewMins, NewMaxs);
+  for (i = 1; i < to_be_zapped; i++)
+    NewOdo.SetIndex (i, CurIndices[i]);
+}