1 /* { dg-do compile } */
2 /* { dg-require-visibility "" } */
3 
4 typedef enum {} UErrorCode;
5 class A {
6 public:
7   virtual A &m_fn1(A &, const A &, UErrorCode &) const;
8   void m_fn2();
9   A();
10   A(int);
11 };
12 class __attribute__((visibility("hidden"))) B : public A {
13 public:
B(A & p1)14   B(A &p1) : norm2(p1), set(0) {}
15   A &m_fn1(A &, const A &, UErrorCode &) const;
16   A &norm2;
17   const int &set;
18 };
19 
20 UErrorCode a;
21 A c;
fn1(A * p1)22 void fn1(A *p1) {
23   A b;
24   p1->m_fn1(b, 0, a).m_fn2();
25 }
26 
fn2()27 void fn2() {
28   B d(c);
29   fn1(&d);
30 }
31