зеркало из https://github.com/microsoft/clang-1.git
Thread a Scope pointer into BuildRecoveryCallExpr to help typo
correction find names when a call failed. Fixes <rdar://problem/7853795>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101278 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
aaf87162c5
Коммит
1aae80b173
|
@ -1271,7 +1271,7 @@ public:
|
|||
OverloadCandidateSet &CandidateSet,
|
||||
bool PartialOverloading = false);
|
||||
|
||||
OwningExprResult BuildOverloadedCallExpr(Expr *Fn,
|
||||
OwningExprResult BuildOverloadedCallExpr(Scope *S, Expr *Fn,
|
||||
UnresolvedLookupExpr *ULE,
|
||||
SourceLocation LParenLoc,
|
||||
Expr **Args, unsigned NumArgs,
|
||||
|
|
|
@ -3558,7 +3558,7 @@ Sema::ActOnCallExpr(Scope *S, ExprArg fn, SourceLocation LParenLoc,
|
|||
Expr *NakedFn = Fn->IgnoreParens();
|
||||
if (isa<UnresolvedLookupExpr>(NakedFn)) {
|
||||
UnresolvedLookupExpr *ULE = cast<UnresolvedLookupExpr>(NakedFn);
|
||||
return BuildOverloadedCallExpr(Fn, ULE, LParenLoc, Args, NumArgs,
|
||||
return BuildOverloadedCallExpr(S, Fn, ULE, LParenLoc, Args, NumArgs,
|
||||
CommaLocs, RParenLoc);
|
||||
}
|
||||
|
||||
|
|
|
@ -5639,7 +5639,7 @@ static Sema::OwningExprResult Destroy(Sema &SemaRef, Expr *Fn,
|
|||
///
|
||||
/// Returns true if new candidates were found.
|
||||
static Sema::OwningExprResult
|
||||
BuildRecoveryCallExpr(Sema &SemaRef, Expr *Fn,
|
||||
BuildRecoveryCallExpr(Sema &SemaRef, Scope *S, Expr *Fn,
|
||||
UnresolvedLookupExpr *ULE,
|
||||
SourceLocation LParenLoc,
|
||||
Expr **Args, unsigned NumArgs,
|
||||
|
@ -5661,7 +5661,7 @@ BuildRecoveryCallExpr(Sema &SemaRef, Expr *Fn,
|
|||
|
||||
LookupResult R(SemaRef, ULE->getName(), ULE->getNameLoc(),
|
||||
Sema::LookupOrdinaryName);
|
||||
if (SemaRef.DiagnoseEmptyLookup(/*Scope=*/0, SS, R))
|
||||
if (SemaRef.DiagnoseEmptyLookup(S, SS, R))
|
||||
return Destroy(SemaRef, Fn, Args, NumArgs);
|
||||
|
||||
assert(!R.empty() && "lookup results empty despite recovery");
|
||||
|
@ -5697,7 +5697,7 @@ BuildRecoveryCallExpr(Sema &SemaRef, Expr *Fn,
|
|||
/// resolution. Otherwise, emits diagnostics, deletes all of the
|
||||
/// arguments and Fn, and returns NULL.
|
||||
Sema::OwningExprResult
|
||||
Sema::BuildOverloadedCallExpr(Expr *Fn, UnresolvedLookupExpr *ULE,
|
||||
Sema::BuildOverloadedCallExpr(Scope *S, Expr *Fn, UnresolvedLookupExpr *ULE,
|
||||
SourceLocation LParenLoc,
|
||||
Expr **Args, unsigned NumArgs,
|
||||
SourceLocation *CommaLocs,
|
||||
|
@ -5730,7 +5730,7 @@ Sema::BuildOverloadedCallExpr(Expr *Fn, UnresolvedLookupExpr *ULE,
|
|||
// AddRecoveryCallCandidates diagnoses the error itself, so we just
|
||||
// bailout out if it fails.
|
||||
if (CandidateSet.empty())
|
||||
return BuildRecoveryCallExpr(*this, Fn, ULE, LParenLoc, Args, NumArgs,
|
||||
return BuildRecoveryCallExpr(*this, S, Fn, ULE, LParenLoc, Args, NumArgs,
|
||||
CommaLocs, RParenLoc);
|
||||
|
||||
OverloadCandidateSet::iterator Best;
|
||||
|
|
|
@ -40,3 +40,12 @@ class B : public A {
|
|||
|
||||
void f() throw();
|
||||
void f(); // expected-warning{{missing exception specification}}
|
||||
|
||||
namespace rdar7853795 {
|
||||
struct A {
|
||||
bool getNumComponents() const; // expected-note{{declared here}}
|
||||
void dump() const {
|
||||
getNumComponenets(); // expected-error{{use of undeclared identifier 'getNumComponenets'; did you mean 'getNumComponents'?}}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче