1 // { dg-do run  }
2 // { dg-options "-Wno-pmf-conversions" }
3 // prms-id: 10769
4 
5 #define PMF2PF(PMF) ((void (*)())(PMF))
6 
7 int ok = 0;
8 
9 class A {
10 public:
f1a()11   void f1a() { ok += 3; }
f1b()12   void f1b() { ok += 5; }
f2a()13   void f2a() { ok += 7; }
f2b()14   void f2b() { }
15   static void (*table[2][2])();
16   void main();
17 } a;
18 
19 void (*A::table[2][2])()
20   = { { PMF2PF(&A::f1a), PMF2PF(&A::f1b) },
21       { PMF2PF(&A::f2a), PMF2PF(&A::f1b) },
22   };
23 
24 void
dispatch(A * obj,int i,int j)25 dispatch (A *obj, int i, int j)
26 {
27   (*(void (*)(A *))A::table[i][j])(obj);
28 }
29 
main()30 void A::main() {
31   dispatch (&a, 0, 0);
32   void (A::*mPtr)() = &A::f1a;
33 
34   (*(void (*)(A*))PMF2PF(mPtr))(&a);
35   (*(void (*)(A*))PMF2PF(f2a))(&a); // { dg-bogus "" "" { xfail *-*-* } }
36 }
37 
main()38 int main() {
39   a.A::main();
40   dispatch (&a, 0, 1);
41   void (A::*mPtr)() = &A::f1b;
42 
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;
46 }
47