diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index d637ed51b1b1..e7cd4fb57578 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -3029,9 +3029,8 @@ BuiltinCandidateTypeSet::AddTypesConvertedFrom(QualType Ty, } CXXRecordDecl *ClassDecl = cast(TyRec->getDecl()); - // FIXME: Visit conversion functions in the base classes, too. OverloadedFunctionDecl *Conversions - = ClassDecl->getConversionFunctions(); + = ClassDecl->getVisibleConversionFunctions(); for (OverloadedFunctionDecl::function_iterator Func = Conversions->function_begin(); Func != Conversions->function_end(); ++Func) { diff --git a/clang/test/SemaCXX/builtin-ptrtomember-overload.cpp b/clang/test/SemaCXX/builtin-ptrtomember-overload.cpp index 8c6fb3973562..718e981805aa 100644 --- a/clang/test/SemaCXX/builtin-ptrtomember-overload.cpp +++ b/clang/test/SemaCXX/builtin-ptrtomember-overload.cpp @@ -12,8 +12,7 @@ struct C : B { void foo(C c, B b, int A::* pmf) { - // FIXME. Bug or correct? gcc accepts it. It requires derived-to-base followed by user defined conversion to work. - int j = c->*pmf; // expected-error {{left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is 'struct C'}} + int j = c->*pmf; int i = b->*pmf; }