aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2009-10-07 17:26:09 +0000
committerFariborz Jahanian <fjahanian@apple.com>2009-10-07 17:26:09 +0000
commitca4fb04b5c43f866c095a3bcc14e02a150da2568 (patch)
tree8c698989a1dd8ce3dfb37f9ad8a98a55fc88477c
parent7974c3b7062f85bb7c0ada34526cdefe1d30f89b (diff)
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
-rw-r--r--lib/Sema/SemaOverload.cpp3
-rw-r--r--test/SemaCXX/builtin-ptrtomember-overload.cpp3
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<CXXRecordDecl>(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;
}