summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-12-05 00:26:13 +0000
committerTed Kremenek <kremenek@apple.com>2007-12-05 00:26:13 +0000
commit166e505d27d0eb67f083febe5352c8f679376827 (patch)
tree2bb8318703672f5bcc52fd902ca97f04365cc21f
parente63414238836fd7e354fcfa404357e7a72fce119 (diff)
downloadbcm5719-llvm-166e505d27d0eb67f083febe5352c8f679376827.tar.gz
bcm5719-llvm-166e505d27d0eb67f083febe5352c8f679376827.zip
Added serialization support of SourceManager to the clang driver.
llvm-svn: 44592
-rw-r--r--clang/Driver/ASTConsumers.h3
-rw-r--r--clang/Driver/SerializationTest.cpp21
-rw-r--r--clang/Driver/clang.cpp3
3 files changed, 17 insertions, 10 deletions
diff --git a/clang/Driver/ASTConsumers.h b/clang/Driver/ASTConsumers.h
index 43dd738c39e..a22113aebd7 100644
--- a/clang/Driver/ASTConsumers.h
+++ b/clang/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/clang/Driver/SerializationTest.cpp b/clang/Driver/SerializationTest.cpp
index 80049d4f2bb..0354f2b655f 100644
--- a/clang/Driver/SerializationTest.cpp
+++ b/clang/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<Decl*> 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/clang/Driver/clang.cpp b/clang/Driver/clang.cpp
index eeaf6496e75..396fb65f4f9 100644
--- a/clang/Driver/clang.cpp
+++ b/clang/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:
OpenPOWER on IntegriCloud