Author: rsmith Date: Thu Aug 25 13:26:30 2016 New Revision: 279766 URL: http://llvm.org/viewvc/llvm-project?rev=279766&view=rev Log: Refactor to remove the assumption that we know the name of the module we're emitting at the point when we create a PCHGenerator (with the C++ modules TS, we find that out part way through parsing the input).
Modified: cfe/trunk/include/clang/Serialization/ASTWriter.h cfe/trunk/lib/Frontend/ASTUnit.cpp cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp cfe/trunk/lib/Frontend/FrontendActions.cpp cfe/trunk/lib/Serialization/GeneratePCH.cpp Modified: cfe/trunk/include/clang/Serialization/ASTWriter.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTWriter.h?rev=279766&r1=279765&r2=279766&view=diff ============================================================================== --- cfe/trunk/include/clang/Serialization/ASTWriter.h (original) +++ cfe/trunk/include/clang/Serialization/ASTWriter.h Thu Aug 25 13:26:30 2016 @@ -909,7 +909,6 @@ public: class PCHGenerator : public SemaConsumer { const Preprocessor &PP; std::string OutputFile; - clang::Module *Module; std::string isysroot; Sema *SemaPtr; std::shared_ptr<PCHBuffer> Buffer; @@ -925,7 +924,7 @@ protected: public: PCHGenerator( const Preprocessor &PP, StringRef OutputFile, - clang::Module *Module, StringRef isysroot, + StringRef isysroot, std::shared_ptr<PCHBuffer> Buffer, ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>> Extensions, bool AllowASTWithErrors = false, Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=279766&r1=279765&r2=279766&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original) +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Thu Aug 25 13:26:30 2016 @@ -925,7 +925,7 @@ public: PrecompilePreambleConsumer(ASTUnit &Unit, PrecompilePreambleAction *Action, const Preprocessor &PP, StringRef isysroot, std::unique_ptr<raw_ostream> Out) - : PCHGenerator(PP, "", nullptr, isysroot, std::make_shared<PCHBuffer>(), + : PCHGenerator(PP, "", isysroot, std::make_shared<PCHBuffer>(), ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>>(), /*AllowASTWithErrors=*/true), Unit(Unit), Hash(Unit.getCurrentTopLevelHashValue()), Action(Action), Modified: cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp?rev=279766&r1=279765&r2=279766&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp (original) +++ cfe/trunk/lib/Frontend/ChainedIncludesSource.cpp Thu Aug 25 13:26:30 2016 @@ -161,7 +161,7 @@ IntrusiveRefCntPtr<ExternalSemaSource> c auto Buffer = std::make_shared<PCHBuffer>(); ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>> Extensions; auto consumer = llvm::make_unique<PCHGenerator>( - Clang->getPreprocessor(), "-", nullptr, /*isysroot=*/"", Buffer, + Clang->getPreprocessor(), "-", /*isysroot=*/"", Buffer, Extensions, /*AllowASTWithErrors=*/true); Clang->getASTContext().setASTMutationListener( consumer->GetASTMutationListener()); Modified: cfe/trunk/lib/Frontend/FrontendActions.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendActions.cpp?rev=279766&r1=279765&r2=279766&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/FrontendActions.cpp (original) +++ cfe/trunk/lib/Frontend/FrontendActions.cpp Thu Aug 25 13:26:30 2016 @@ -91,7 +91,7 @@ GeneratePCHAction::CreateASTConsumer(Com auto Buffer = std::make_shared<PCHBuffer>(); std::vector<std::unique_ptr<ASTConsumer>> Consumers; Consumers.push_back(llvm::make_unique<PCHGenerator>( - CI.getPreprocessor(), OutputFile, nullptr, Sysroot, + CI.getPreprocessor(), OutputFile, Sysroot, Buffer, CI.getFrontendOpts().ModuleFileExtensions, /*AllowASTWithErrors*/false, /*IncludeTimestamps*/ @@ -141,7 +141,7 @@ GenerateModuleAction::CreateASTConsumer( std::vector<std::unique_ptr<ASTConsumer>> Consumers; Consumers.push_back(llvm::make_unique<PCHGenerator>( - CI.getPreprocessor(), OutputFile, Module, Sysroot, + CI.getPreprocessor(), OutputFile, Sysroot, Buffer, CI.getFrontendOpts().ModuleFileExtensions, /*AllowASTWithErrors=*/false, /*IncludeTimestamps=*/ Modified: cfe/trunk/lib/Serialization/GeneratePCH.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/GeneratePCH.cpp?rev=279766&r1=279765&r2=279766&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/GeneratePCH.cpp (original) +++ cfe/trunk/lib/Serialization/GeneratePCH.cpp Thu Aug 25 13:26:30 2016 @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// #include "clang/AST/ASTContext.h" +#include "clang/Lex/HeaderSearch.h" #include "clang/Lex/Preprocessor.h" #include "clang/Sema/SemaConsumer.h" #include "clang/Serialization/ASTWriter.h" @@ -21,12 +22,11 @@ using namespace clang; PCHGenerator::PCHGenerator( - const Preprocessor &PP, StringRef OutputFile, - clang::Module *Module, StringRef isysroot, - std::shared_ptr<PCHBuffer> Buffer, - ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>> Extensions, - bool AllowASTWithErrors, bool IncludeTimestamps) - : PP(PP), OutputFile(OutputFile), Module(Module), isysroot(isysroot.str()), + const Preprocessor &PP, StringRef OutputFile, StringRef isysroot, + std::shared_ptr<PCHBuffer> Buffer, + ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>> Extensions, + bool AllowASTWithErrors, bool IncludeTimestamps) + : PP(PP), OutputFile(OutputFile), isysroot(isysroot.str()), SemaPtr(nullptr), Buffer(Buffer), Stream(Buffer->Data), Writer(Stream, Extensions, IncludeTimestamps), AllowASTWithErrors(AllowASTWithErrors) { @@ -45,6 +45,13 @@ void PCHGenerator::HandleTranslationUnit if (hasErrors && !AllowASTWithErrors) return; + Module *Module = nullptr; + if (PP.getLangOpts().CompilingModule) { + Module = PP.getHeaderSearchInfo().lookupModule( + PP.getLangOpts().CurrentModule, /*AllowSearch*/ false); + assert(Module && "emitting module but current module doesn't exist"); + } + // Emit the PCH file to the Buffer. assert(SemaPtr && "No Sema?"); Buffer->Signature = _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits