From ca4fb04b5c43f866c095a3bcc14e02a150da2568 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 7 Oct 2009 17:26:09 +0000 Subject: [PATCH] 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 --- lib/Sema/SemaOverload.cpp | 3 +-- test/SemaCXX/builtin-ptrtomember-overload.cpp | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) 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; } -- 2.50.1