OSDN Git Service

[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.old-deja / g++.jason / thunk3.C
1 // Test that function calls using thunks work right.
2 // Special g++ Options: -fvtable-thunks
3 // excess errors test - XFAIL mips*-*-* alpha*-*-* rs6000-*-* powerpc-*-eabi m68k-*-coff m68k-motorola-sysv m88k-motorola-sysv3
4
5 #include <stdarg.h>
6
7 struct A {
8   void* p;
9   A (void* q): p (q) { }
10   A (const A& a): p (a.p) { }
11 };
12
13 class CBase {
14 public:
15    void BaseFunc();
16 };
17
18 class MMixin {
19 public:
20    virtual A MixinFunc(int arg, ...) = 0;
21 };
22
23 class CExample : public CBase, public MMixin {
24 public:
25    A MixinFunc(int arg, ...);
26 };
27
28 void CBase::BaseFunc()
29 {
30 }
31
32 A CExample::MixinFunc(int arg, ...)
33 {
34   va_list ap;
35   va_start (ap, arg);
36
37   if (arg != 1 || va_arg (ap, int) != 2 || va_arg (ap, int) != 3
38       || va_arg (ap, int) != 4 || va_arg (ap, int) != 5
39       || va_arg (ap, int) != 6 || va_arg (ap, int) != 7
40       || va_arg (ap, int) != 8 || va_arg (ap, int) != 9)
41     return 0;
42   return this;
43 }
44
45 void* test(MMixin& anExample)
46 {
47   return anExample.MixinFunc(1,2,3,4,5,6,7,8,9).p;
48 }
49
50 main ()
51 {
52   CExample c;
53
54   if (test(c) != &c)
55     return 1;
56 }