summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-10-14 16:50:13 +0000
committerDouglas Gregor <dgregor@apple.com>2009-10-14 16:50:13 +0000
commit4aa2dc41dca3023ee07d01bda9a76e6a0ea39180 (patch)
tree9868c797bb2ee190c349169e90c2d9d731149cab /clang/lib
parent93117bc499b1a6197e7402374dbf7d484a8804a1 (diff)
downloadbcm5719-llvm-4aa2dc41dca3023ee07d01bda9a76e6a0ea39180.tar.gz
bcm5719-llvm-4aa2dc41dca3023ee07d01bda9a76e6a0ea39180.zip
Implement support for overloaded operator uses that result to a call
to a member operator template. We missed updating this call site when adding support for function templates; bug exposed by a test for PR5072. llvm-svn: 84111
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Sema/SemaOverload.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp
index 8c697cc8688..99e7b0811c9 100644
--- a/clang/lib/Sema/SemaOverload.cpp
+++ b/clang/lib/Sema/SemaOverload.cpp
@@ -2769,10 +2769,21 @@ void Sema::AddMemberOperatorCandidates(OverloadedOperatorKind Op,
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);
+ ++Oper) {
+ if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(*Oper)) {
+ AddMethodCandidate(Method, Args[0], Args+1, NumArgs - 1, CandidateSet,
+ /*SuppressUserConversions=*/false);
+ continue;
+ }
+
+ assert(isa<FunctionTemplateDecl>(*Oper) &&
+ isa<CXXMethodDecl>(cast<FunctionTemplateDecl>(*Oper)
+ ->getTemplatedDecl()) &&
+ "Expected a member function template");
+ AddMethodTemplateCandidate(cast<FunctionTemplateDecl>(*Oper), false, 0, 0,
+ Args[0], Args+1, NumArgs - 1, CandidateSet,
+ /*SuppressUserConversions=*/false);
+ }
}
}
OpenPOWER on IntegriCloud