]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
thunk7.C: New test.
authorBernd Schmidt <bernd.schmidt@analog.com>
Wed, 28 Feb 2007 01:34:10 +0000 (01:34 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Wed, 28 Feb 2007 01:34:10 +0000 (01:34 +0000)
* g++.dg/inherit/thunk7.C: New test.

From-SVN: r122399

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

index 1b31b2feef8a87be19545d02ccd285152f856854..eae024069e8abd9fe243f76b7b47c4ec4ffc0197 100644 (file)
@@ -1,3 +1,7 @@
+2007-02-28  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * g++.dg/inherit/thunk7.C: New test.
+
 2007-02-27  Uros Bizjak  <ubizjak@gmail.com>
 
        PR target/30970
diff --git a/gcc/testsuite/g++.dg/inherit/thunk7.C b/gcc/testsuite/g++.dg/inherit/thunk7.C
new file mode 100644 (file)
index 0000000..0e16d89
--- /dev/null
@@ -0,0 +1,55 @@
+// { dg-do run }
+
+#include <stdlib.h>
+
+class A
+{
+    int a, b;
+public:
+    virtual void foo (int a, int b, int c, int d);
+};
+
+class B
+{
+    int c, d;
+public:
+    virtual void bar (int a, int b, int c, int d);
+};
+
+class D : public virtual A, public virtual B
+{
+    int e, f;
+};
+
+void A::foo(int a, int b, int c, int d)
+{
+    if (a != 1 || b != 2 || c != 3 || d != 4)
+       abort ();
+}
+
+void B::bar (int a, int b, int c, int d)
+{
+    if (a != 5 || b != 6 || c != 7 || d != 8)
+       abort ();
+}
+
+class C: private D, public virtual A, public virtual B
+{
+public:
+    virtual void foo (int a, int b, int c, int d) { A::foo (a, b, c, d); D::A::foo (a, b, c, d); }
+    virtual void bar (int a, int b, int c, int d) { B::bar (a, b, c, d); D::B::bar (a, b, c, d); }
+};
+
+C c1;
+C *c2 = &c1;
+A *c3 = &c1;
+B *c4 = &c1;
+
+int main()
+{
+    c2->foo (1, 2, 3, 4);
+    c2->bar (5, 6, 7, 8);
+    c3->foo (1, 2, 3, 4);
+    c4->bar (5, 6, 7, 8);
+    return 0;
+}