From: Ted Kremenek Date: Wed, 5 Dec 2007 00:26:13 +0000 (+0000) Subject: Added serialization support of SourceManager to the clang driver. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dca2466581966f0729d259db2f47a21e17827929;p=clang Added serialization support of SourceManager to the clang driver. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44592 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/ASTConsumers.h b/Driver/ASTConsumers.h index 43dd738c39..a22113aebd 100644 --- a/Driver/ASTConsumers.h +++ b/Driver/ASTConsumers.h @@ -20,6 +20,7 @@ namespace clang { class ASTConsumer; class Diagnostic; +class FileManager; struct LangOptions; ASTConsumer *CreateASTPrinter(std::ostream* OS = NULL); @@ -31,7 +32,7 @@ ASTConsumer *CreateDeadStoreChecker(Diagnostic &Diags); ASTConsumer *CreateUnitValsChecker(Diagnostic &Diags); ASTConsumer *CreateLLVMEmitter(Diagnostic &Diags, const LangOptions &Features); ASTConsumer *CreateCodeRewriterTest(Diagnostic &Diags); -ASTConsumer *CreateSerializationTest(Diagnostic &Diags); +ASTConsumer *CreateSerializationTest(Diagnostic &Diags, FileManager& FMgr); } // end clang namespace diff --git a/Driver/SerializationTest.cpp b/Driver/SerializationTest.cpp index 80049d4f2b..0354f2b655 100644 --- a/Driver/SerializationTest.cpp +++ b/Driver/SerializationTest.cpp @@ -16,6 +16,7 @@ #include "ASTConsumers.h" #include "clang/Basic/TargetInfo.h" +#include "clang/Basic/SourceManager.h" #include "clang/AST/AST.h" #include "clang/AST/ASTConsumer.h" #include "clang/AST/ASTContext.h" @@ -54,6 +55,7 @@ public: class SerializationTest : public ASTConsumer { ASTContext* Context; Diagnostic &Diags; + FileManager &FMgr; std::list Decls; enum { BasicMetadataBlock = 1, @@ -61,7 +63,9 @@ class SerializationTest : public ASTConsumer { DeclsBlock = 3 }; public: - SerializationTest(Diagnostic &d) : Context(NULL), Diags(d) {}; + SerializationTest(Diagnostic &d, FileManager& fmgr) + : Context(NULL), Diags(d), FMgr(fmgr) {}; + ~SerializationTest(); virtual void Initialize(ASTContext& context, unsigned) { @@ -79,8 +83,9 @@ private: } // end anonymous namespace -ASTConsumer* clang::CreateSerializationTest(Diagnostic &Diags) { - return new SerializationTest(Diags); +ASTConsumer* +clang::CreateSerializationTest(Diagnostic &Diags, FileManager& FMgr) { + return new SerializationTest(Diags,FMgr); } static void WritePreamble(llvm::BitstreamWriter& Stream) { @@ -171,8 +176,8 @@ void SerializationTest::Serialize(llvm::sys::Path& Filename, Sezr.EnterBlock(); // "Fake" emit the SourceManager. - llvm::cerr << "Faux-serializing: SourceManager.\n"; - Sezr.EmitPtr(&Context->SourceMgr); + llvm::cerr << "Serializing: SourceManager.\n"; + Sezr.Emit(Context->SourceMgr); // Emit the Target. llvm::cerr << "Serializing: Target.\n"; @@ -256,9 +261,9 @@ void SerializationTest::Deserialize(llvm::sys::Path& Filename, FoundBlock = Dezr.SkipToBlock(BasicMetadataBlock); assert (FoundBlock); - // "Fake" read the SourceManager. - llvm::cerr << "Faux-Deserializing: SourceManager.\n"; - Dezr.RegisterPtr(&Context->SourceMgr); + // Read the SourceManager. + llvm::cerr << "Deserializing: SourceManager.\n"; + SourceManager::CreateAndRegister(Dezr,FMgr); { // Read the TargetInfo. llvm::cerr << "Deserializing: Target.\n"; diff --git a/Driver/clang.cpp b/Driver/clang.cpp index eeaf6496e7..396fb65f4f 100644 --- a/Driver/clang.cpp +++ b/Driver/clang.cpp @@ -905,7 +905,8 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID, break; case TestSerialization: - Consumer = CreateSerializationTest(PP.getDiagnostics()); + Consumer = CreateSerializationTest(PP.getDiagnostics(), + HeaderInfo.getFileMgr()); break; case EmitLLVM: