1// { dg-do compile }
2class IObject {
3public:
4  virtual ~IObject();
5};
6class A {
7  virtual int m_fn1();
8};
9class B {
10public:
11  virtual int m_fn2(B) const;
12};
13class D : IObject, public virtual B {};
14class G : public D, A {
15public:
16  G(A);
17};
18class F : B {
19  friend class C;
20};
21class C {
22  void m_fn3(const IObject &, int &);
23  void m_fn4(const B &, int &);
24};
25A a;
26void C::m_fn3(const IObject &, int &p2) {
27  G r(a);
28  m_fn4(r, p2);
29}
30void C::m_fn4(const B &p1, int &) {
31  F b;
32  p1.m_fn2(b);
33}
34
35