From: Fariborz Jahanian Date: Wed, 7 Oct 2009 17:26:09 +0000 (+0000) Subject: When building candidate set for built-ins; when looking for X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ca4fb04b5c43f866c095a3bcc14e02a150da2568;p=clang When building candidate set for built-ins; when looking for convesion functions, look in base classes to. (Removes a FIXME). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83472 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index d637ed51b1..e7cd4fb575 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/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/test/SemaCXX/builtin-ptrtomember-overload.cpp b/test/SemaCXX/builtin-ptrtomember-overload.cpp index 8c6fb39735..718e981805 100644 --- a/test/SemaCXX/builtin-ptrtomember-overload.cpp +++ b/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; }