1 // RUN: %llvmgcc -S -O0 -g %s -o /dev/null 2 // PR 7104 3 4 struct A { 5 int Ai; 6 }; 7 8 struct B : public A {}; 9 struct C : public B {}; 10 f(int C::*)11const char * f(int C::*){ return ""; } f(int B::*)12int f(int B::*) { return 1; } 13 14 struct D : public C {}; 15 g(int B::*)16const char * g(int B::*){ return ""; } g(int D::*)17int g(int D::*) { return 1; } 18 test()19void test() 20 { 21 int i = f(&A::Ai); 22 23 const char * str = g(&A::Ai); 24 } 25 26 // conversion of B::* to C::* is better than conversion of A::* to C::* 27 typedef void (A::*pmfa)(); 28 typedef void (B::*pmfb)(); 29 typedef void (C::*pmfc)(); 30 31 struct X { 32 operator pmfa(); 33 operator pmfb(); 34 }; 35 36 37 void g(pmfc); 38 test2(X x)39void test2(X x) 40 { 41 g(x); 42 } 43 44