diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Frontend/CompilerInstance.cpp | 2 | ||||
-rw-r--r-- | lib/Frontend/FrontendActions.cpp | 5 | ||||
-rw-r--r-- | lib/Frontend/GeneratePCH.cpp | 11 | ||||
-rw-r--r-- | lib/Frontend/PCHWriter.cpp | 3 |
4 files changed, 15 insertions, 6 deletions
diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index 0ff70edf8b..fa5338d30e 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -255,6 +255,8 @@ void CompilerInstance::createPCHExternalASTSource(llvm::StringRef Path) { llvm::OwningPtr<ExternalASTSource> Source; Source.reset(createPCHExternalASTSource(Path, getHeaderSearchOpts().Sysroot, getPreprocessor(), getASTContext())); + // Remember the PCHReader, but in a non-owning way. + Reader = static_cast<PCHReader*>(Source.get()); getASTContext().setExternalSource(Source); } diff --git a/lib/Frontend/FrontendActions.cpp b/lib/Frontend/FrontendActions.cpp index f0b86a9214..400d35361c 100644 --- a/lib/Frontend/FrontendActions.cpp +++ b/lib/Frontend/FrontendActions.cpp @@ -81,9 +81,10 @@ ASTConsumer *GeneratePCHAction::CreateASTConsumer(CompilerInstance &CI, return 0; if (CI.getFrontendOpts().RelocatablePCH) - return CreatePCHGenerator(CI.getPreprocessor(), OS, Sysroot.c_str()); + return CreatePCHGenerator(CI.getPreprocessor(), OS, + CI.getPCHReader(), Sysroot.c_str()); - return CreatePCHGenerator(CI.getPreprocessor(), OS); + return CreatePCHGenerator(CI.getPreprocessor(), OS, CI.getPCHReader()); } ASTConsumer *InheritanceViewAction::CreateASTConsumer(CompilerInstance &CI, diff --git a/lib/Frontend/GeneratePCH.cpp b/lib/Frontend/GeneratePCH.cpp index 6251bac047..9be103e06e 100644 --- a/lib/Frontend/GeneratePCH.cpp +++ b/lib/Frontend/GeneratePCH.cpp @@ -28,6 +28,7 @@ using namespace clang; namespace { class PCHGenerator : public SemaConsumer { const Preprocessor &PP; + const PCHReader *Chain; const char *isysroot; llvm::raw_ostream *Out; Sema *SemaPtr; @@ -35,6 +36,7 @@ namespace { public: explicit PCHGenerator(const Preprocessor &PP, + const PCHReader *Chain, const char *isysroot, llvm::raw_ostream *Out); virtual void InitializeSema(Sema &S) { SemaPtr = &S; } @@ -43,9 +45,11 @@ namespace { } PCHGenerator::PCHGenerator(const Preprocessor &PP, + const PCHReader *Chain, const char *isysroot, llvm::raw_ostream *OS) - : PP(PP), isysroot(isysroot), Out(OS), SemaPtr(0), StatCalls(0) { + : PP(PP), Chain(Chain), isysroot(isysroot), Out(OS), SemaPtr(0), + StatCalls(0) { // Install a stat() listener to keep track of all of the stat() // calls. @@ -64,7 +68,7 @@ void PCHGenerator::HandleTranslationUnit(ASTContext &Ctx) { // Emit the PCH file assert(SemaPtr && "No Sema?"); - Writer.WritePCH(*SemaPtr, StatCalls, isysroot); + Writer.WritePCH(*SemaPtr, StatCalls, Chain, isysroot); // Write the generated bitstream to "Out". Out->write((char *)&Buffer.front(), Buffer.size()); @@ -75,6 +79,7 @@ void PCHGenerator::HandleTranslationUnit(ASTContext &Ctx) { ASTConsumer *clang::CreatePCHGenerator(const Preprocessor &PP, llvm::raw_ostream *OS, + const PCHReader *Chain, const char *isysroot) { - return new PCHGenerator(PP, isysroot, OS); + return new PCHGenerator(PP, Chain, isysroot, OS); } diff --git a/lib/Frontend/PCHWriter.cpp b/lib/Frontend/PCHWriter.cpp index 8684a06eb0..18ceef99c9 100644 --- a/lib/Frontend/PCHWriter.cpp +++ b/lib/Frontend/PCHWriter.cpp @@ -628,6 +628,7 @@ void PCHWriter::WriteBlockInfoBlock() { RECORD(VERSION_CONTROL_BRANCH_REVISION); RECORD(UNUSED_STATIC_FUNCS); RECORD(MACRO_DEFINITION_OFFSETS); + RECORD(CHAINED_METADATA); // SourceManager Block. BLOCK(SOURCE_MANAGER_BLOCK); @@ -2075,7 +2076,7 @@ PCHWriter::PCHWriter(llvm::BitstreamWriter &Stream) NumLexicalDeclContexts(0), NumVisibleDeclContexts(0) { } void PCHWriter::WritePCH(Sema &SemaRef, MemorizeStatCalls *StatCalls, - const char *isysroot) { + const PCHReader *Chain, const char *isysroot) { using namespace llvm; ASTContext &Context = SemaRef.Context; |