diff options
-rw-r--r-- | clang/include/clang/Serialization/ASTReader.h | 6 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 17 |
3 files changed, 7 insertions, 22 deletions
diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h index 7c5259732dd..af69148140c 100644 --- a/clang/include/clang/Serialization/ASTReader.h +++ b/clang/include/clang/Serialization/ASTReader.h @@ -687,12 +687,6 @@ private: /// Objective-C protocols. std::deque<Decl *> InterestingDecls; - /// \brief Redecls that have been added to the AST - /// - /// Redecls that are deserialized but not in RedeclsAddedToAST must - /// not be passed to the ASTConsumers, even if they are InterestignDecls. - llvm::SmallPtrSet<Decl *, 16> RedeclsAddedToAST; - /// \brief The set of redeclarable declarations that have been deserialized /// since the last time the declaration chains were linked. llvm::SmallPtrSet<Decl *, 16> RedeclsDeserialized; diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index cc6d073b103..f5de6c4bd9c 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -5614,10 +5614,7 @@ void ASTReader::ReadPendingInstantiations( SourceLocation Loc = SourceLocation::getFromRawEncoding(PendingInstantiations[Idx++]); - // For modules, find out whether an instantiation already exists - if (!getContext().getLangOpts().Modules - || needPendingInstantiation(D)) - Pending.push_back(std::make_pair(D, Loc)); + Pending.push_back(std::make_pair(D, Loc)); } PendingInstantiations.clear(); } @@ -6528,5 +6525,4 @@ ASTReader::~ASTReader() { J != F; ++J) delete J->first; } - assert(RedeclsAddedToAST.empty() && "RedeclsAddedToAST not empty!"); } diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 42ea7946e22..c291b4b2401 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -320,7 +320,10 @@ void ASTDeclReader::Visit(Decl *D) { ID->TypeForDecl = Reader.GetType(TypeIDForTypeDecl).getTypePtrOrNull(); } else if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) { // FunctionDecl's body was written last after all other Stmts/Exprs. - if (Record[Idx++]) + // We only read it if FD doesn't already have a body (e.g., from another + // module). + if (Record[Idx++] && + (!Reader.getContext().getLangOpts().Modules || !FD->hasBody())) FD->setLazyBody(GetCurrentCursorOffset()); } else if (D->isTemplateParameter()) { // If we have a fully initialized template parameter, we can now @@ -1778,11 +1781,9 @@ ASTDeclReader::FindExistingResult::~FindExistingResult() { DeclContext *DC = New->getLexicalDeclContext(); if (DC->isTranslationUnit() && Reader.SemaObj) { - if (Reader.SemaObj->IdResolver.tryAddTopLevelDecl(New, New->getDeclName())) - Reader.RedeclsAddedToAST.insert(New); + Reader.SemaObj->IdResolver.tryAddTopLevelDecl(New, New->getDeclName()); } else if (DC->isNamespace()) { DC->addDecl(New); - Reader.RedeclsAddedToAST.insert(New); } } @@ -2157,13 +2158,7 @@ Decl *ASTReader::ReadDeclRecord(DeclID ID) { // AST consumer might need to know about, queue it. // We don't pass it to the consumer immediately because we may be in recursive // loading, and some declarations may still be initializing. - if (getContext().getLangOpts().Modules) { - if (RedeclsAddedToAST.count(D)) { - RedeclsAddedToAST.erase(D); - if (isConsumerInterestedIn(D)) - InterestingDecls.push_back(D); - } - } else if (isConsumerInterestedIn(D)) + if (isConsumerInterestedIn(D)) InterestingDecls.push_back(D); return D; |