Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / gcc / testsuite / g++.old-deja / g++.mike / pmf1.C
1 // { dg-do run  }
2 // extern "C" int printf(const char *, ...);
3
4 class X
5 {
6 public:
7   int  a;
8   int f(int);
9 };
10
11 class Y
12 {
13 public:
14   int b;
15   int c;
16   int g(int);
17 };
18
19 class MD : public X, public Y
20 {
21 public:
22   int c;
23   int hf(int);
24 };
25
26 int MD::* pmi0 = &MD::a;
27 int MD::* pmi1 = &MD::b;
28 int MD::* pmi2 = &MD::c;
29
30 int (MD::* pmf0)(int) = &MD::f;
31 int (MD::* pmf1)(int) = &MD::g;
32 int (MD::* pmf2)(int) = &MD::hf;
33
34 int main()
35 {
36   MD obj;
37   int fail = 0;
38
39   obj.a = 1;
40   obj.b = 2;
41   obj.c = 3;
42
43   obj.*pmi0 = 7;
44   obj.*pmi1 = 8;
45   obj.*pmi2 = 9;
46
47   fail += (obj.*pmf0)(7);
48   fail += (obj.*pmf1)(8);
49   fail += (obj.*pmf2)(9);
50
51 #if 0
52   if (fail != 0)
53     printf ("failed %d tests\n", fail);
54   else
55     printf ("passed\n");
56
57   printf ("sizeof(X) = %d, sizeof(Y) = %d, sizeof(MD) = %d\n",
58           sizeof(X), sizeof(Y), sizeof(MD));
59 #endif
60   return fail;
61 }
62
63 int X::f(int v)
64 {
65   if (v != a)
66   {
67 //    printf ("failed in X::f, a = %d\n", a);
68     return 1;
69   }
70   return 0;
71 }
72
73 int Y::g(int v)
74 {
75   if (v != b)
76   {
77 //    printf ("failed in Y::g, b = %d\n", b);
78     return 1;
79   }
80   return 0;
81 }
82
83 int MD::hf(int v)
84 {
85   if (v != c)
86   {
87 //    printf ("failed in MD::hf, c = %d\n", c);
88     return 1;
89   }
90   return 0;
91 }