]> granicus.if.org Git - clang/commitdiff
Implemented serialization of TargetInfo.
authorTed Kremenek <kremenek@apple.com>
Mon, 3 Dec 2007 22:48:14 +0000 (22:48 +0000)
committerTed Kremenek <kremenek@apple.com>
Mon, 3 Dec 2007 22:48:14 +0000 (22:48 +0000)
SerializationTest (subclass of ASTConsumer) now takes Diagnostics& in its ctor.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44555 91177308-0d34-0410-b5e6-96231b3b80d8

Driver/ASTConsumers.h
Driver/SerializationTest.cpp
Driver/clang.cpp

index 37f825b5daecada0a4c055f736cbd105bfb32a13..43dd738c39ecb8474a5ca6bc8399a7159d43bdda 100644 (file)
@@ -31,7 +31,7 @@ ASTConsumer *CreateDeadStoreChecker(Diagnostic &Diags);
 ASTConsumer *CreateUnitValsChecker(Diagnostic &Diags);
 ASTConsumer *CreateLLVMEmitter(Diagnostic &Diags, const LangOptions &Features);
 ASTConsumer *CreateCodeRewriterTest(Diagnostic &Diags);
-ASTConsumer *CreateSerializationTest();
+ASTConsumer *CreateSerializationTest(Diagnostic &Diags);
 
 } // end clang namespace
 
index f8d4b7820e34401fb8e97368917123927781e59e..80049d4f2bb07c2077716a9062514ec2d686a6fd 100644 (file)
 //===----------------------------------------------------------------------===//
 
 #include "ASTConsumers.h"
+#include "clang/Basic/TargetInfo.h"
 #include "clang/AST/AST.h"
 #include "clang/AST/ASTConsumer.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/CFG.h"
+#include "clang.h"
 #include "llvm/System/Path.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/Support/MemoryBuffer.h"
@@ -51,6 +53,7 @@ public:
 
 class SerializationTest : public ASTConsumer {
   ASTContext* Context;
+  Diagnostic &Diags;
   std::list<Decl*> Decls;
   
   enum { BasicMetadataBlock = 1,
@@ -58,7 +61,7 @@ class SerializationTest : public ASTConsumer {
          DeclsBlock = 3 };
 
 public:  
-  SerializationTest() : Context(NULL) {};
+  SerializationTest(Diagnostic &d) : Context(NULL), Diags(d) {};
   ~SerializationTest();
 
   virtual void Initialize(ASTContext& context, unsigned) {
@@ -76,8 +79,8 @@ private:
   
 } // end anonymous namespace
 
-ASTConsumer* clang::CreateSerializationTest() {  
-  return new SerializationTest();
+ASTConsumer* clang::CreateSerializationTest(Diagnostic &Diags) {  
+  return new SerializationTest(Diags);
 }
 
 static void WritePreamble(llvm::BitstreamWriter& Stream) {
@@ -171,9 +174,10 @@ void SerializationTest::Serialize(llvm::sys::Path& Filename,
   llvm::cerr << "Faux-serializing: SourceManager.\n";
   Sezr.EmitPtr(&Context->SourceMgr);
   
-  // "Fake" emit the Target.
-  llvm::cerr << "Faux-serializing: Target.\n";
+  // Emit the Target.
+  llvm::cerr << "Serializing: Target.\n";
   Sezr.EmitPtr(&Context->Target);
+  Sezr.EmitCStr(Context->Target.getTargetTriple());
 
   Sezr.ExitBlock();
 
@@ -256,13 +260,21 @@ void SerializationTest::Deserialize(llvm::sys::Path& Filename,
   llvm::cerr << "Faux-Deserializing: SourceManager.\n";
   Dezr.RegisterPtr(&Context->SourceMgr);
 
-  // "Fake" read the TargetInfo.
-  llvm::cerr << "Faux-Deserializing: Target.\n";
-  Dezr.RegisterPtr(&Context->Target);
-
+  { // Read the TargetInfo.
+    llvm::cerr << "Deserializing: Target.\n";
+    llvm::SerializedPtrID PtrID = Dezr.ReadPtrID();
+    char* triple = Dezr.ReadCStr(NULL,0,true);
+    std::vector<std::string> triples;
+    triples.push_back(triple);
+    delete [] triple;
+    Dezr.RegisterPtr(PtrID,CreateTargetInfo(triples,Diags));
+  }
+    
   // For Selectors, we must read the identifier table first because the
   //  SelectorTable depends on the identifiers being already deserialized.
-  llvm::Deserializer::Location SelectorBlockLoc = Dezr.getCurrentBlockLocation();
+  llvm::Deserializer::Location SelectorBlockLoc =
+    Dezr.getCurrentBlockLocation();
+    
   Dezr.SkipBlock();
   
   // Read the identifier table.
index b403dd324a45a58ef2be9539b0ac6872f4ee3303..139febeda1c8eee369f03b984a86c4720e8d7ade 100644 (file)
@@ -899,7 +899,7 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
     break;
 
   case TestSerialization:
-    Consumer = CreateSerializationTest();
+    Consumer = CreateSerializationTest(PP.getDiagnostics());
     break;
       
   case EmitLLVM: