aboutsummaryrefslogtreecommitdiff
path: root/lib/AST/DeclObjC.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-04-22 04:39:47 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-04-22 04:39:47 +0000
commitd4ae6c038ea8dd2faaadd1f9da725ec37b4f7ef9 (patch)
treebef05313f4b219338fb2bb7edf65e097a2754cdf /lib/AST/DeclObjC.cpp
parent3b3a45858c6b2a45114e91902c3bf3c4b7f5f302 (diff)
Revert r69771, I missed some (obvious) details. :/
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69773 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/DeclObjC.cpp')
-rw-r--r--lib/AST/DeclObjC.cpp28
1 files changed, 5 insertions, 23 deletions
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp
index de10230991..d9bec6d31a 100644
--- a/lib/AST/DeclObjC.cpp
+++ b/lib/AST/DeclObjC.cpp
@@ -380,32 +380,14 @@ ObjCInterfaceDecl::FindCategoryDeclaration(IdentifierInfo *CategoryId) const {
///
const FieldDecl *
ObjCInterfaceDecl::lookupFieldDeclForIvar(ASTContext &Context,
- const ObjCIvarDecl *OIVD) const {
+ const ObjCIvarDecl *IVar) const {
assert(!isForwardDecl() && "Invalid interface decl!");
const RecordDecl *RecordForDecl = Context.addRecordToClass(this);
+ assert(RecordForDecl && "lookupFieldDeclForIvar no storage for class");
DeclContext::lookup_const_result Lookup =
- RecordForDecl->lookup(Context, OIVD->getDeclName());
-
- if (Lookup.first != Lookup.second)
- return cast<FieldDecl>(*Lookup.first);
-
- // If lookup failed, try the superclass.
- //
- // FIXME: This is very non-performant. However, the root problem
- // here is not the lookup itself. The main issue is that we should
- // be able to map from an IvarDecl back to the context it lives
- // inside; then this problem goes away. Currently, however,
- // IvarDecl's live inside the translation unit!!!!
- //
- // Fixing IvarDecl's is less obvious than it might appear, we need
- // to choose where synthesized ivars should live, and we also need
- // to decide where to put IvarDecl's which appeared in an
- // implementation context (either in the situation where they must
- // duplicate the instance variables, or if there was no instance
- // declaration).
- const ObjCInterfaceDecl *OID = getSuperClass();
- assert(OID && "field decl not found!");
- return OID->lookupFieldDeclForIvar(Context, OIVD);
+ RecordForDecl->lookup(Context, IVar->getDeclName());
+ assert((Lookup.first != Lookup.second) && "field decl not found");
+ return cast<FieldDecl>(*Lookup.first);
}
//===----------------------------------------------------------------------===//