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