diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-10-14 16:50:13 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-10-14 16:50:13 +0000 |
commit | 4aa2dc41dca3023ee07d01bda9a76e6a0ea39180 (patch) | |
tree | 9868c797bb2ee190c349169e90c2d9d731149cab /clang/lib | |
parent | 93117bc499b1a6197e7402374dbf7d484a8804a1 (diff) | |
download | bcm5719-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.cpp | 19 |
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); + } } } |