/// 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;
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();
}
J != F; ++J)
delete J->first;
}
- assert(RedeclsAddedToAST.empty() && "RedeclsAddedToAST not empty!");
}
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
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);
}
}
// 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;