summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/inherit/thunk7.C
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/g++.dg/inherit/thunk7.C
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/g++.dg/inherit/thunk7.C')
-rw-r--r--gcc/testsuite/g++.dg/inherit/thunk7.C55
1 files changed, 55 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/inherit/thunk7.C b/gcc/testsuite/g++.dg/inherit/thunk7.C
new file mode 100644
index 000000000..0e16d8954
--- /dev/null
+++ b/gcc/testsuite/g++.dg/inherit/thunk7.C
@@ -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;
+}