diff options
author | Kaelyn Uhrain <rikka@google.com> | 2011-08-05 00:09:52 +0000 |
---|---|---|
committer | Kaelyn Uhrain <rikka@google.com> | 2011-08-05 00:09:52 +0000 |
commit | 4283092a4b86aed16a5e27f822d641012d31267d (patch) | |
tree | 21ff1156d3ecccbaa84aae96cbad03256904f595 /clang/lib | |
parent | 190f2b1c21a1852e8303ea0d7f0103879c3247b9 (diff) | |
download | bcm5719-llvm-4283092a4b86aed16a5e27f822d641012d31267d.tar.gz bcm5719-llvm-4283092a4b86aed16a5e27f822d641012d31267d.zip |
Have the typo correction in DiagnoseEmptyLookup properly handle template
functions when performing function overload resolution.
llvm-svn: 136948
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 14 | ||||
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 2 |
2 files changed, 10 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index ffa092aad1e..bc7d0bdfe50 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -1364,8 +1364,9 @@ Sema::DecomposeUnqualifiedId(const UnqualifiedId &Id, /// /// \return false if new lookup candidates were found bool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, - CorrectTypoContext CTC, Expr **Args, - unsigned NumArgs) { + CorrectTypoContext CTC, + TemplateArgumentListInfo *ExplicitTemplateArgs, + Expr **Args, unsigned NumArgs) { DeclarationName Name = R.getLookupName(); unsigned diagnostic = diag::err_undeclared_var_use; @@ -1458,10 +1459,13 @@ bool Sema::DiagnoseEmptyLookup(Scope *S, CXXScopeSpec &SS, LookupResult &R, CDEnd = Corrected.end(); CD != CDEnd; ++CD) { if (FunctionDecl *FD = dyn_cast<FunctionDecl>(*CD)) - AddOverloadCandidate(FD, DeclAccessPair::make(*CD, AS_none), + AddOverloadCandidate(FD, DeclAccessPair::make(FD, AS_none), Args, NumArgs, OCS); - // TODO: Handle FunctionTemplateDecl and other Decl types that - // support overloading and could be corrected by CorrectTypo. + else if (FunctionTemplateDecl *FTD = + dyn_cast<FunctionTemplateDecl>(*CD)) + AddTemplateOverloadCandidate( + FTD, DeclAccessPair::make(FTD, AS_none), ExplicitTemplateArgs, + Args, NumArgs, OCS); } switch (OCS.BestViableFunction(*this, R.getNameLoc(), Best)) { case OR_Success: diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 712720bf9e8..72a43d89e8c 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -8221,7 +8221,7 @@ BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn, ExplicitTemplateArgs, Args, NumArgs) && (!EmptyLookup || SemaRef.DiagnoseEmptyLookup(S, SS, R, Sema::CTC_Expression, - Args, NumArgs))) + ExplicitTemplateArgs, Args, NumArgs))) return ExprError(); assert(!R.empty() && "lookup results empty despite recovery"); |