blob: 89cc31d0fff8569171bd8b5482676655dd968c57 [file] [log] [blame]
// { dg-do run }
// { dg-options "-Wno-pmf-conversions" }
// prms-id: 10769
#define PMF2PF(PMF) ((void (*)())(PMF))
int ok = 0;
class A {
public:
void f1a() { ok += 3; }
void f1b() { ok += 5; }
void f2a() { ok += 7; }
void f2b() { }
static void (*table[2][2])();
void main();
} a;
void (*A::table[2][2])()
= { { PMF2PF(&A::f1a), PMF2PF(&A::f1b) },
{ PMF2PF(&A::f2a), PMF2PF(&A::f1b) },
};
void
dispatch (A *obj, int i, int j)
{
(*(void (*)(A *))A::table[i][j])(obj);
}
void A::main() {
dispatch (&a, 0, 0);
void (A::*mPtr)() = &A::f1a;
(*(void (*)(A*))PMF2PF(mPtr))(&a);
(*(void (*)(A*))PMF2PF(f2a))(&a); // { dg-bogus "" "" { xfail *-*-* } }
}
int main() {
a.A::main();
dispatch (&a, 0, 1);
void (A::*mPtr)() = &A::f1b;
(*(void (*)(A*))PMF2PF(a.*mPtr))(&a);
(*(void (*)(A*))PMF2PF(a.f2a))(&a); // { dg-bogus "" "" { xfail *-*-* } }
return ok != 3+3+5+5+7+7;
}