From 24579842a55369e2b80c415a276a08e9dd277144 Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Wed, 22 Apr 2009 10:56:29 +0000 Subject: [PATCH] Simplify addRecordToClass, it is not legal to call it on a forward declaration now. llvm-svn: 69799 --- clang/lib/AST/ASTContext.cpp | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 1e553e3aba3d..d91a8cefd14a 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -644,29 +644,20 @@ void ASTContext::CollectObjCIvars(const ObjCInterfaceDecl *OI, /// ivars and all those inherited. /// const RecordDecl *ASTContext::addRecordToClass(const ObjCInterfaceDecl *D) { + assert(!D->isForwardDecl() && "Invalid decl!"); + // FIXME: The only client relying on this working in the presence of // forward declarations is IRgen, which should not need it. Fix // and simplify this code. RecordDecl *&RD = ASTRecordForInterface[D]; - if (RD) { - // If we have a record decl already and it is either a definition or if 'D' - // is still a forward declaration, return it. - if (RD->isDefinition() || D->isForwardDecl()) - return RD; - } - - // If D is a forward declaration, then just make a forward struct decl. - if (D->isForwardDecl()) - return RD = RecordDecl::Create(*this, TagDecl::TK_struct, 0, - D->getLocation(), - D->getIdentifier()); + if (RD) + return RD; llvm::SmallVector RecFields; CollectObjCIvars(D, RecFields); - if (RD == 0) - RD = RecordDecl::Create(*this, TagDecl::TK_struct, 0, D->getLocation(), - D->getIdentifier()); + RD = RecordDecl::Create(*this, TagDecl::TK_struct, 0, D->getLocation(), + D->getIdentifier()); /// FIXME! Can do collection of ivars and adding to the record while /// doing it. for (unsigned i = 0, e = RecFields.size(); i != e; ++i) {