forked from OSchip/llvm-project
Typo correction for identifiers within nested name specifiers, e.g.,
typo.cpp:18:1: error: use of undeclared identifier 'other_std'; did you mean 'otherstd'? other_std::strng str1; ^~~~~~~~~ otherstd llvm-svn: 92350
This commit is contained in:
parent
d5bace7092
commit
532e68f1f3
|
@ -428,6 +428,28 @@ Sema::CXXScopeTy *Sema::BuildCXXNestedNameSpecifier(Scope *S,
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Deal with ambiguities cleanly.
|
// FIXME: Deal with ambiguities cleanly.
|
||||||
|
|
||||||
|
if (Found.empty() && !ErrorRecoveryLookup) {
|
||||||
|
// We haven't found anything, and we're not recovering from a
|
||||||
|
// different kind of error, so look for typos.
|
||||||
|
DeclarationName Name = Found.getLookupName();
|
||||||
|
if (CorrectTypo(Found, S, &SS, LookupCtx, EnteringContext) &&
|
||||||
|
Found.isSingleResult() &&
|
||||||
|
isAcceptableNestedNameSpecifier(Found.getAsSingle<NamedDecl>())) {
|
||||||
|
if (LookupCtx)
|
||||||
|
Diag(Found.getNameLoc(), diag::err_no_member_suggest)
|
||||||
|
<< Name << LookupCtx << Found.getLookupName() << SS.getRange()
|
||||||
|
<< CodeModificationHint::CreateReplacement(Found.getNameLoc(),
|
||||||
|
Found.getLookupName().getAsString());
|
||||||
|
else
|
||||||
|
Diag(Found.getNameLoc(), diag::err_undeclared_var_use_suggest)
|
||||||
|
<< Name << Found.getLookupName()
|
||||||
|
<< CodeModificationHint::CreateReplacement(Found.getNameLoc(),
|
||||||
|
Found.getLookupName().getAsString());
|
||||||
|
} else
|
||||||
|
Found.clear();
|
||||||
|
}
|
||||||
|
|
||||||
NamedDecl *SD = Found.getAsSingle<NamedDecl>();
|
NamedDecl *SD = Found.getAsSingle<NamedDecl>();
|
||||||
if (isAcceptableNestedNameSpecifier(SD)) {
|
if (isAcceptableNestedNameSpecifier(SD)) {
|
||||||
if (!ObjectType.isNull() && !ObjectTypeSearchedInScope) {
|
if (!ObjectType.isNull() && !ObjectTypeSearchedInScope) {
|
||||||
|
|
|
@ -15,7 +15,8 @@ namespace otherstd {
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
otherstd::strng str1; // expected-error{{no type named 'strng' in namespace 'otherstd'; did you mean 'string'?}}
|
other_std::strng str1; // expected-error{{use of undeclared identifier 'other_std'; did you mean 'otherstd'?}} \
|
||||||
|
// expected-error{{no type named 'strng' in namespace 'otherstd'; did you mean 'string'?}}
|
||||||
tring str2; // expected-error{{unknown type name 'tring'; did you mean 'string'?}}
|
tring str2; // expected-error{{unknown type name 'tring'; did you mean 'string'?}}
|
||||||
|
|
||||||
float area(float radius, float pi) {
|
float area(float radius, float pi) {
|
||||||
|
|
Loading…
Reference in New Issue