diff options
Diffstat (limited to 'lib/Serialization/GeneratePCH.cpp')
-rw-r--r-- | lib/Serialization/GeneratePCH.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/lib/Serialization/GeneratePCH.cpp b/lib/Serialization/GeneratePCH.cpp index 308fde8b1dd7..e1765dafd96f 100644 --- a/lib/Serialization/GeneratePCH.cpp +++ b/lib/Serialization/GeneratePCH.cpp @@ -12,24 +12,21 @@ // //===----------------------------------------------------------------------===// -#include "clang/Serialization/ASTWriter.h" -#include "clang/AST/ASTConsumer.h" #include "clang/AST/ASTContext.h" -#include "clang/Basic/FileManager.h" +#include "clang/Lex/HeaderSearch.h" #include "clang/Lex/Preprocessor.h" #include "clang/Sema/SemaConsumer.h" +#include "clang/Serialization/ASTWriter.h" #include "llvm/Bitcode/BitstreamWriter.h" -#include <string> 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) { @@ -48,6 +45,16 @@ void PCHGenerator::HandleTranslationUnit(ASTContext &Ctx) { if (hasErrors && !AllowASTWithErrors) return; + Module *Module = nullptr; + if (PP.getLangOpts().isCompilingModule()) { + Module = PP.getHeaderSearchInfo().lookupModule( + PP.getLangOpts().CurrentModule, /*AllowSearch*/ false); + if (!Module) { + assert(hasErrors && "emitting module but current module doesn't exist"); + return; + } + } + // Emit the PCH file to the Buffer. assert(SemaPtr && "No Sema?"); Buffer->Signature = |