mirror of https://github.com/microsoft/clang.git
In LookupResult::resolveKind(), when handling multiple found declarations, ignore invalid declarations.
This reduces the "ambiguous reference" errors (which are rather strange in C/ObjC) and fixes an assertion hit with an invalid code test case. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175869 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d5668a2447
commit
745af1c348
|
@ -371,6 +371,12 @@ void LookupResult::resolveKind() {
|
|||
NamedDecl *D = Decls[I]->getUnderlyingDecl();
|
||||
D = cast<NamedDecl>(D->getCanonicalDecl());
|
||||
|
||||
// Ignore an invalid declaration unless it's the only one left.
|
||||
if (D->isInvalidDecl() && I < N-1) {
|
||||
Decls[I] = Decls[--N];
|
||||
continue;
|
||||
}
|
||||
|
||||
// Redeclarations of types via typedef can occur both within a scope
|
||||
// and, through using declarations and directives, across scopes. There is
|
||||
// no ambiguity if they all refer to the same type, so unique based on the
|
||||
|
|
|
@ -42,3 +42,7 @@ void foo() {
|
|||
void test2();
|
||||
void test2(undef); // expected-error {{a parameter list without types is only allowed in a function definition}}
|
||||
void test2() { }
|
||||
|
||||
void test3();
|
||||
void test3; // expected-error {{incomplete type}}
|
||||
void test3() { }
|
||||
|
|
|
@ -2,11 +2,10 @@
|
|||
// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -verify %s
|
||||
// rdar://12456743
|
||||
|
||||
typedef signed char BOOL; // expected-note 2 {{candidate found by name lookup is 'BOOL'}}
|
||||
typedef signed char BOOL;
|
||||
|
||||
EXPORT BOOL FUNC(BOOL enabled); // expected-error {{unknown type name 'EXPORT'}} // expected-error {{expected ';' after top level declarator}} \
|
||||
// expected-note 2 {{candidate found by name lookup is 'BOOL'}}
|
||||
EXPORT BOOL FUNC(BOOL enabled); // expected-error {{unknown type name 'EXPORT'}} // expected-error {{expected ';' after top level declarator}}
|
||||
|
||||
static inline BOOL MFIsPrivateVersion(void) { // expected-error {{reference to 'BOOL' is ambiguous}}
|
||||
return __objc_yes; // expected-error {{reference to 'BOOL' is ambiguous}}
|
||||
static inline BOOL MFIsPrivateVersion(void) {
|
||||
return __objc_yes;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue