diff options
Diffstat (limited to 'lib/Sema/SemaLookup.cpp')
-rw-r--r-- | lib/Sema/SemaLookup.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/lib/Sema/SemaLookup.cpp b/lib/Sema/SemaLookup.cpp index df869d9a6b..b1643bb50b 100644 --- a/lib/Sema/SemaLookup.cpp +++ b/lib/Sema/SemaLookup.cpp @@ -311,6 +311,10 @@ getIdentifierNamespacesFromLookupNameKind(Sema::LookupNameKind NameKind, Sema::LookupResult Sema::LookupResult::CreateLookupResult(ASTContext &Context, NamedDecl *D) { + if (ObjCCompatibleAliasDecl *Alias + = dyn_cast_or_null<ObjCCompatibleAliasDecl>(D)) + D = Alias->getClassInterface(); + LookupResult Result; Result.StoredKind = (D && isa<OverloadedFunctionDecl>(D))? OverloadedDeclSingleDecl : SingleDecl; @@ -338,9 +342,14 @@ Sema::LookupResult::CreateLookupResult(ASTContext &Context, return Result; } } + + Decl *D = *F; + if (ObjCCompatibleAliasDecl *Alias + = dyn_cast_or_null<ObjCCompatibleAliasDecl>(D)) + D = Alias->getClassInterface(); Result.StoredKind = SingleDecl; - Result.First = reinterpret_cast<uintptr_t>(*F); + Result.First = reinterpret_cast<uintptr_t>(D); Result.Last = 0; return Result; } @@ -362,9 +371,14 @@ Sema::LookupResult::CreateLookupResult(ASTContext &Context, return Result; } } + + Decl *D = *F; + if (ObjCCompatibleAliasDecl *Alias + = dyn_cast_or_null<ObjCCompatibleAliasDecl>(D)) + D = Alias->getClassInterface(); Result.StoredKind = SingleDecl; - Result.First = reinterpret_cast<uintptr_t>(*F); + Result.First = reinterpret_cast<uintptr_t>(D); Result.Last = 0; return Result; } @@ -930,16 +944,6 @@ Sema::LookupName(Scope *S, DeclarationName Name, LookupNameKind NameKind, S, RedeclarationOnly, Loc)); } } - if (getLangOptions().ObjC1 && II) { - // @interface and @compatibility_alias introduce typedef-like names. - // Unlike typedef's, they can only be introduced at file-scope (and are - // therefore not scoped decls). They can, however, be shadowed by - // other names in IDNS_Ordinary. - ObjCAliasTy::iterator I = ObjCAliasDecls.find(II); - if (I != ObjCAliasDecls.end()) - return LookupResult::CreateLookupResult(Context, - I->second->getClassInterface()); - } } return LookupResult::CreateLookupResult(Context, 0); } |