This commit was manufactured by cvs2svn to create branch 'gomp-branch'.
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.mike / p10769a.C
blob89cc31d0fff8569171bd8b5482676655dd968c57
1 // { dg-do run  }
2 // { dg-options "-Wno-pmf-conversions" }
3 // prms-id: 10769
5 #define PMF2PF(PMF) ((void (*)())(PMF))
7 int ok = 0;
9 class A {
10 public:
11   void f1a() { ok += 3; }
12   void f1b() { ok += 5; }
13   void f2a() { ok += 7; }
14   void f2b() { }
15   static void (*table[2][2])();
16   void main();
17 } a;
19 void (*A::table[2][2])()
20   = { { PMF2PF(&A::f1a), PMF2PF(&A::f1b) },
21       { PMF2PF(&A::f2a), PMF2PF(&A::f1b) },
22   };
24 void
25 dispatch (A *obj, int i, int j)
27   (*(void (*)(A *))A::table[i][j])(obj);
30 void A::main() {
31   dispatch (&a, 0, 0);
32   void (A::*mPtr)() = &A::f1a;
34   (*(void (*)(A*))PMF2PF(mPtr))(&a);
35   (*(void (*)(A*))PMF2PF(f2a))(&a); // { dg-bogus "" "" { xfail *-*-* } }  
38 int main() {
39   a.A::main();
40   dispatch (&a, 0, 1);
41   void (A::*mPtr)() = &A::f1b;
43   (*(void (*)(A*))PMF2PF(a.*mPtr))(&a);
44   (*(void (*)(A*))PMF2PF(a.f2a))(&a); // { dg-bogus "" "" { xfail *-*-* } }  
45   return ok != 3+3+5+5+7+7;