1/* { dg-do compile } */
2class A {
3public:
4  A(int, int);
5};
6class B {
7public:
8  void m_fn1(bool, const int *, int &);
9  unsigned m_fn2();
10};
11namespace {
12class C {
13  B &VTables;
14  void m_fn3(A, unsigned, const int *, int &);
15
16public:
17  int VFTableBuilder_VisitedBases;
18  B VFTableBuilder_VTables;
19  C() : VTables(VFTableBuilder_VTables) {
20    m_fn3(A(0, 0), 0, 0, VFTableBuilder_VisitedBases);
21  }
22};
23}
24int a;
25void C::m_fn3(A, unsigned, const int *, int &) {
26  for (;;)
27    1 ? VTables.m_fn2() : 0;
28}
29void B::m_fn1(bool, const int *, int &) { C(); }
30unsigned B::m_fn2() { m_fn1(0, 0, a); }
31