re PR rtl-optimization/23299 ("classic" GCSE caused miscompilation)
authorJakub Jelinek <jakub@redhat.com>
Tue, 16 Aug 2005 08:38:15 +0000 (10:38 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 16 Aug 2005 08:38:15 +0000 (10:38 +0200)
PR rtl-optimization/23299
* g++.dg/opt/pr23299.C: New test.

From-SVN: r103148

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr23299.C [new file with mode: 0644]

index 3b05f172ff093ab0ab2f2d7df6a18ba36b72128d..7d05ac7d2dc5d70df6303555db9d5e477c58e4a4 100644 (file)
@@ -1,3 +1,8 @@
+2005-08-16  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/23299
+       * g++.dg/opt/pr23299.C: New test.
+
 2005-08-15  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
        * gcc.dg/special/weak-1.c: xfail 32-bit hppa*-*-hpux*.
diff --git a/gcc/testsuite/g++.dg/opt/pr23299.C b/gcc/testsuite/g++.dg/opt/pr23299.C
new file mode 100644 (file)
index 0000000..94a414a
--- /dev/null
@@ -0,0 +1,63 @@
+// PR rtl-optimization/23299
+// { dg-do run }
+// { dg-options "-Os" }
+
+extern "C" void abort ();
+
+struct A
+{
+  virtual int a () {}
+};
+struct B : public A
+{
+  virtual int b () {}
+};
+struct C : public A
+{
+  virtual int c () {}
+};
+struct D
+{
+  D () { d = 64; }
+  ~D ();
+  int d;
+};
+
+int x;
+D::~D ()
+{
+  x |= 1;
+  if (d != 64)
+    abort ();
+}
+
+struct E : public B, public C
+{
+  E () {}
+  virtual int c ();
+  ~E ();
+  D dv;
+};
+
+E::~E ()
+{
+  int r = c ();
+}
+
+int
+E::c ()
+{
+  if (x > 10)
+    throw 1;
+  x |= 2;
+}
+
+int
+main (void)
+{
+  {
+    E e;
+  }
+  if (x != 3)
+    abort ();
+}