// { dg-do run  }
extern "C" int printf(const char *, ...);

class A_table {
  int c;
public:
  A_table() { c = 3;}
  virtual void func2(int &item) { printf("func2(%d,) c=%d\n",item,c);}
};

class B_table : private A_table {
public:
  typedef void (B_table::* B_ti_fn) (int &item);
  B_table() { j = 0x4321;}
  virtual void call_fn_fn1(int &item, void *pfn1);
  void func1(int &item) { printf("func1(%d)\n",item);}
  virtual void func2(int &item) { printf("func2(%d) j=%d\n",item,j);}
  int j;
};

class foo : public A_table {
public:
  int i;
  virtual ~foo();
  virtual void func2(int &item) { printf("func2(%d) i=%d\n",item,i);}
};
foo::~foo() { i = 0;}

class bar :public foo,public B_table {
public:
  int w;
  virtual ~bar();
  virtual void func2(int &item) { printf("func2(%d) w=%d\n",item,w);}
};
bar::~bar() { w = 0;}

void B_table::call_fn_fn1(int &item, void *pfn1) {
  (this->*(*(B_ti_fn*)pfn1))(item);
}

B_table b;
bar jar;

int main() {
  /* APPLE LOCAL default to Wformat-security 5764921 */
  printf("ptr to B_table=%p, ptr to A_table=%p\n",(void*)&b,(void*)(A_table*)&b);
  B_table::B_ti_fn z = &B_table::func1;
  int j = 1;
  jar.call_fn_fn1(j,(void *)&z);
  j++;
  z = &B_table::func2;
  b.call_fn_fn1(j,(void *)&z);
  j++;
  jar.call_fn_fn1(j,(void *)&z);
  return 0;
}
