summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaOverload.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-08-27 23:35:55 +0000
committerDouglas Gregor <dgregor@apple.com>2009-08-27 23:35:55 +0000
commit6a1f965853df1fccd0c898ed0e89d243e36fbea6 (patch)
tree9ed50415315ae4ec19256cc3dd70207c8c72ab09 /clang/lib/Sema/SemaOverload.cpp
parent7ef882dca03568e87372356025e41a3131d37f57 (diff)
downloadbcm5719-llvm-6a1f965853df1fccd0c898ed0e89d243e36fbea6.tar.gz
bcm5719-llvm-6a1f965853df1fccd0c898ed0e89d243e36fbea6.zip
When looking for overloaded member operators, make sure to instantiate
class template specializations (when possible) and look into base classes. Thanks to Eli for the test case! FIXME -=1. llvm-svn: 80302
Diffstat (limited to 'clang/lib/Sema/SemaOverload.cpp')
-rw-r--r--clang/lib/Sema/SemaOverload.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 5c92e12f697..7e00a1ecd84 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -2638,11 +2638,17 @@ void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
// result of the qualified lookup of T1::operator@
// (13.3.1.1.1); otherwise, the set of member candidates is
// empty.
- // FIXME: Lookup in base classes, too!
if (const RecordType *T1Rec = T1->getAs<RecordType>()) {
- DeclContext::lookup_const_iterator Oper, OperEnd;
- for (llvm::tie(Oper, OperEnd) = T1Rec->getDecl()->lookup(OpName);
- Oper != OperEnd; ++Oper)
+ // Complete the type if it can be completed. Otherwise, we're done.
+ if (RequireCompleteType(OpLoc, T1, PartialDiagnostic(0)))
+ return;
+
+ LookupResult Operators = LookupQualifiedName(T1Rec->getDecl(), OpName,
+ LookupOrdinaryName, false);
+ for (LookupResult::iterator Oper = Operators.begin(),
+ OperEnd = Operators.end();
+ Oper != OperEnd;
+ ++Oper)
AddMethodCandidate(cast<CXXMethodDecl>(*Oper), Args[0],
Args+1, NumArgs - 1, CandidateSet,
/*SuppressUserConversions=*/false);
OpenPOWER on IntegriCloud