From a8cc6ce36e70e2afa22ab6b4340035cb3941c2eb Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 30 Nov 2011 04:39:39 +0000 Subject: [PATCH] When writing a module file, pass the module through to the AST writer. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145479 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Frontend/FrontendActions.h | 3 +++ include/clang/Serialization/ASTWriter.h | 13 +++++++------ lib/Frontend/ASTUnit.cpp | 4 ++-- lib/Frontend/FrontendActions.cpp | 8 +++----- lib/Serialization/ASTWriter.cpp | 11 ++++++----- lib/Serialization/ChainedIncludesSource.cpp | 4 ++-- lib/Serialization/GeneratePCH.cpp | 6 +++--- 7 files changed, 26 insertions(+), 23 deletions(-) diff --git a/include/clang/Frontend/FrontendActions.h b/include/clang/Frontend/FrontendActions.h index 0c78a06746..bf071b3a51 100644 --- a/include/clang/Frontend/FrontendActions.h +++ b/include/clang/Frontend/FrontendActions.h @@ -11,6 +11,7 @@ #define LLVM_CLANG_FRONTEND_FRONTENDACTIONS_H #include "clang/Frontend/FrontendAction.h" +#include "clang/Lex/ModuleMap.h" #include #include @@ -92,6 +93,8 @@ public: }; class GenerateModuleAction : public ASTFrontendAction { + ModuleMap::Module *Module; + protected: virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI, StringRef InFile); diff --git a/include/clang/Serialization/ASTWriter.h b/include/clang/Serialization/ASTWriter.h index 5d97c1815b..ac750c9196 100644 --- a/include/clang/Serialization/ASTWriter.h +++ b/include/clang/Serialization/ASTWriter.h @@ -18,6 +18,7 @@ #include "clang/AST/DeclarationName.h" #include "clang/AST/TemplateBase.h" #include "clang/AST/ASTMutationListener.h" +#include "clang/Lex/ModuleMap.h" #include "clang/Serialization/ASTBitCodes.h" #include "clang/Serialization/ASTDeserializationListener.h" #include "clang/Sema/SemaConsumer.h" @@ -412,7 +413,7 @@ private: void WriteASTCore(Sema &SemaRef, MemorizeStatCalls *StatCalls, StringRef isysroot, const std::string &OutputFile, - bool IsModule); + ModuleMap::Module *WritingModule); public: /// \brief Create a new precompiled header writer that outputs to @@ -428,14 +429,14 @@ public: /// \param StatCalls the object that cached all of the stat() calls made while /// searching for source files and headers. /// - /// \param IsModule Whether we're writing a module (otherwise, we're writing a - /// precompiled header). + /// \param WritingModule The module that we are writing. If null, we are + /// writing a precompiled header. /// /// \param isysroot if non-empty, write a relocatable file whose headers /// are relative to the given system root. void WriteAST(Sema &SemaRef, MemorizeStatCalls *StatCalls, const std::string &OutputFile, - bool IsModule, StringRef isysroot); + ModuleMap::Module *WritingModule, StringRef isysroot); /// \brief Emit a source location. void AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record); @@ -672,7 +673,7 @@ public: class PCHGenerator : public SemaConsumer { const Preprocessor &PP; std::string OutputFile; - bool IsModule; + ModuleMap::Module *Module; std::string isysroot; raw_ostream *Out; Sema *SemaPtr; @@ -687,7 +688,7 @@ protected: public: PCHGenerator(const Preprocessor &PP, StringRef OutputFile, - bool IsModule, + ModuleMap::Module *Module, StringRef isysroot, raw_ostream *Out); ~PCHGenerator(); virtual void InitializeSema(Sema &S) { SemaPtr = &S; } diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index e08417ddcf..7436efba41 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -924,7 +924,7 @@ class PrecompilePreambleConsumer : public PCHGenerator { public: PrecompilePreambleConsumer(ASTUnit &Unit, const Preprocessor &PP, StringRef isysroot, raw_ostream *Out) - : PCHGenerator(PP, "", /*IsModule=*/false, isysroot, Out), Unit(Unit), + : PCHGenerator(PP, "", 0, isysroot, Out), Unit(Unit), Hash(Unit.getCurrentTopLevelHashValue()) { Hash = 0; } @@ -2423,7 +2423,7 @@ bool ASTUnit::serialize(raw_ostream &OS) { llvm::BitstreamWriter Stream(Buffer); ASTWriter Writer(Stream); // FIXME: Handle modules - Writer.WriteAST(getSema(), 0, std::string(), /*IsModule=*/false, ""); + Writer.WriteAST(getSema(), 0, std::string(), 0, ""); // Write the generated bitstream to "Out". if (!Buffer.empty()) diff --git a/lib/Frontend/FrontendActions.cpp b/lib/Frontend/FrontendActions.cpp index 418dbf4cd8..0cbcde5bda 100644 --- a/lib/Frontend/FrontendActions.cpp +++ b/lib/Frontend/FrontendActions.cpp @@ -86,8 +86,7 @@ ASTConsumer *GeneratePCHAction::CreateASTConsumer(CompilerInstance &CI, if (!CI.getFrontendOpts().RelocatablePCH) Sysroot.clear(); - return new PCHGenerator(CI.getPreprocessor(), OutputFile, /*Module=*/false, - Sysroot, OS); + return new PCHGenerator(CI.getPreprocessor(), OutputFile, 0, Sysroot, OS); } bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI, @@ -122,7 +121,7 @@ ASTConsumer *GenerateModuleAction::CreateASTConsumer(CompilerInstance &CI, if (ComputeASTConsumerArguments(CI, InFile, Sysroot, OutputFile, OS)) return 0; - return new PCHGenerator(CI.getPreprocessor(), OutputFile, /*MakeModule=*/true, + return new PCHGenerator(CI.getPreprocessor(), OutputFile, Module, Sysroot, OS); } @@ -184,8 +183,7 @@ bool GenerateModuleAction::BeginSourceFileAction(CompilerInstance &CI, } // Dig out the module definition. - ModuleMap::Module *Module = HS.getModule(CI.getLangOpts().CurrentModule, - /*AllowSearch=*/false); + Module = HS.getModule(CI.getLangOpts().CurrentModule, /*AllowSearch=*/false); if (!Module) { CI.getDiagnostics().Report(diag::err_missing_module) << CI.getLangOpts().CurrentModule << Filename; diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp index 51aadb35e5..e225103f72 100644 --- a/lib/Serialization/ASTWriter.cpp +++ b/lib/Serialization/ASTWriter.cpp @@ -2791,7 +2791,7 @@ ASTWriter::~ASTWriter() { void ASTWriter::WriteAST(Sema &SemaRef, MemorizeStatCalls *StatCalls, const std::string &OutputFile, - bool IsModule, StringRef isysroot) { + ModuleMap::Module *WritingModule, StringRef isysroot) { WritingAST = true; // Emit the file header. @@ -2803,7 +2803,7 @@ void ASTWriter::WriteAST(Sema &SemaRef, MemorizeStatCalls *StatCalls, WriteBlockInfoBlock(); Context = &SemaRef.Context; - WriteASTCore(SemaRef, StatCalls, isysroot, OutputFile, IsModule); + WriteASTCore(SemaRef, StatCalls, isysroot, OutputFile, WritingModule); Context = 0; WritingAST = false; @@ -2820,7 +2820,8 @@ static void AddLazyVectorDecls(ASTWriter &Writer, Vector &Vec, void ASTWriter::WriteASTCore(Sema &SemaRef, MemorizeStatCalls *StatCalls, StringRef isysroot, - const std::string &OutputFile, bool IsModule) { + const std::string &OutputFile, + ModuleMap::Module *WritingModule) { using namespace llvm; ASTContext &Context = SemaRef.Context; @@ -3086,11 +3087,11 @@ void ASTWriter::WriteASTCore(Sema &SemaRef, MemorizeStatCalls *StatCalls, Buffer.data(), Buffer.size()); } - WritePreprocessor(PP, IsModule); + WritePreprocessor(PP, WritingModule != 0); WriteHeaderSearch(PP.getHeaderSearchInfo(), isysroot); WriteSelectors(SemaRef); WriteReferencedSelectorsPool(SemaRef); - WriteIdentifierTable(PP, SemaRef.IdResolver, IsModule); + WriteIdentifierTable(PP, SemaRef.IdResolver, WritingModule != 0); WriteFPPragmaOptions(SemaRef.getFPOptions()); WriteOpenCLExtensions(SemaRef); diff --git a/lib/Serialization/ChainedIncludesSource.cpp b/lib/Serialization/ChainedIncludesSource.cpp index 5fcf11a36e..90c71140be 100644 --- a/lib/Serialization/ChainedIncludesSource.cpp +++ b/lib/Serialization/ChainedIncludesSource.cpp @@ -105,8 +105,8 @@ ChainedIncludesSource *ChainedIncludesSource::create(CompilerInstance &CI) { SmallVector serialAST; llvm::raw_svector_ostream OS(serialAST); llvm::OwningPtr consumer; - consumer.reset(new PCHGenerator(Clang->getPreprocessor(), "-", - /*IsModule=*/false, /*isysroot=*/"", &OS)); + consumer.reset(new PCHGenerator(Clang->getPreprocessor(), "-", 0, + /*isysroot=*/"", &OS)); Clang->getASTContext().setASTMutationListener( consumer->GetASTMutationListener()); Clang->setASTConsumer(consumer.take()); diff --git a/lib/Serialization/GeneratePCH.cpp b/lib/Serialization/GeneratePCH.cpp index a2534db82c..d24424f074 100644 --- a/lib/Serialization/GeneratePCH.cpp +++ b/lib/Serialization/GeneratePCH.cpp @@ -28,10 +28,10 @@ using namespace clang; PCHGenerator::PCHGenerator(const Preprocessor &PP, StringRef OutputFile, - bool IsModule, + ModuleMap::Module *Module, StringRef isysroot, raw_ostream *OS) - : PP(PP), OutputFile(OutputFile), IsModule(IsModule), + : PP(PP), OutputFile(OutputFile), Module(Module), isysroot(isysroot.str()), Out(OS), SemaPtr(0), StatCalls(0), Stream(Buffer), Writer(Stream) { // Install a stat() listener to keep track of all of the stat() @@ -49,7 +49,7 @@ void PCHGenerator::HandleTranslationUnit(ASTContext &Ctx) { // Emit the PCH file assert(SemaPtr && "No Sema?"); - Writer.WriteAST(*SemaPtr, StatCalls, OutputFile, IsModule, isysroot); + Writer.WriteAST(*SemaPtr, StatCalls, OutputFile, Module, isysroot); // Write the generated bitstream to "Out". Out->write((char *)&Buffer.front(), Buffer.size()); -- 2.40.0