forked from OSchip/llvm-project
Avoid duplicated diagnostic when lookup for a nested-name-specifier fails due to ambiguity.
llvm-svn: 252967
This commit is contained in:
parent
14679e9f68
commit
4b213d73d8
|
@ -533,6 +533,9 @@ bool Sema::BuildCXXNestedNameSpecifier(Scope *S,
|
|||
LookupName(Found, S);
|
||||
}
|
||||
|
||||
if (Found.isAmbiguous())
|
||||
return true;
|
||||
|
||||
// If we performed lookup into a dependent context and did not find anything,
|
||||
// that's fine: just build a dependent nested-name-specifier.
|
||||
if (Found.empty() && isDependent &&
|
||||
|
@ -551,8 +554,6 @@ bool Sema::BuildCXXNestedNameSpecifier(Scope *S,
|
|||
return false;
|
||||
}
|
||||
|
||||
// FIXME: Deal with ambiguities cleanly.
|
||||
|
||||
if (Found.empty() && !ErrorRecoveryLookup) {
|
||||
// If identifier is not found as class-name-or-namespace-name, but is found
|
||||
// as other entity, don't look for typos.
|
||||
|
@ -562,6 +563,8 @@ bool Sema::BuildCXXNestedNameSpecifier(Scope *S,
|
|||
else if (S && !isDependent)
|
||||
LookupName(R, S);
|
||||
if (!R.empty()) {
|
||||
// Don't diagnose problems with this speculative lookup.
|
||||
R.suppressDiagnostics();
|
||||
// The identifier is found in ordinary lookup. If correction to colon is
|
||||
// allowed, suggest replacement to ':'.
|
||||
if (IsCorrectedToColon) {
|
||||
|
|
|
@ -14,8 +14,7 @@ template <class T> struct Derived: Base<int>, Base<char> {
|
|||
t->Derived::Base<T>::f();
|
||||
t->Base<T>::f();
|
||||
t->Base::f(); // expected-error{{member 'Base' found in multiple base classes of different types}} \
|
||||
// expected-error{{no member named 'f' in 'X0'}} \
|
||||
// expected-error{{'Base' is not a class, namespace, or enumeration}}
|
||||
// expected-error{{no member named 'f' in 'X0'}}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ void use_things() {
|
|||
|
||||
void use_things_again() {
|
||||
use(Typedef().n); // expected-error {{ambiguous}}
|
||||
use(NS::n); // expected-error {{ambiguous}} expected-error{{'NS' is not a class, namespace, or enumeration}}
|
||||
use(NS::n); // expected-error {{ambiguous}}
|
||||
use(AliasDecl); // expected-error {{ambiguous}}
|
||||
use(Enumerator); // expected-error {{ambiguous}}
|
||||
use(UsingDecl); // expected-error {{ambiguous}}
|
||||
|
|
Loading…
Reference in New Issue