Added default creation of root-level block by bitstream serializer.
authorTed Kremenek <kremenek@apple.com>
Mon, 5 Nov 2007 20:47:27 +0000 (20:47 +0000)
committerTed Kremenek <kremenek@apple.com>
Mon, 5 Nov 2007 20:47:27 +0000 (20:47 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43732 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/Serialize.h
lib/Bitcode/Reader/Deserialize.cpp

index 197ab9f33d67cced519aa859694deab93e9e00ff..a465beca9d43c569b3815261e705278a465e5c7f 100644 (file)
@@ -31,7 +31,7 @@ class Serializer {
   MapTy PtrMap;
   
 public:
-  Serializer(BitstreamWriter& stream, unsigned BlockID = 0);
+  Serializer(BitstreamWriter& stream, unsigned BlockID = 8);
   
   ~Serializer();
   
index 0482b1f7e9979bea5c1f9dc89c96608fd6433f48..31d180ff32e297a6b41273acea4ec7694e763d9f 100644 (file)
@@ -47,9 +47,28 @@ void Deserializer::ReadRecord() {
   // FIXME: Check if we haven't run off the edge of the stream.
   // FIXME: Handle abbreviations.
 
-  // FIXME: Check for the correct code.
-  unsigned Code = Stream.ReadCode();
+  unsigned Code;
 
+  while (true) {
+    
+    Code = Stream.ReadCode();
+  
+    if (Code == bitc::ENTER_SUBBLOCK) {
+      // No known subblocks, always skip them.
+      unsigned id = Stream.ReadSubBlockID();
+      Stream.EnterSubBlock(id);
+      continue;
+    }
+
+    if (Code == bitc::END_BLOCK) {
+      bool x = Stream.ReadBlockEnd();
+      assert (!x && "Error at block end.");
+      continue;
+    }
+    
+    break;
+  }
+  
   assert (Record.size() == 0);  
   Stream.ReadRecord(Code,Record);  
   assert (Record.size() > 0);
@@ -141,7 +160,7 @@ uintptr_t Deserializer::ReadInternalRefPtr() {
 
   MapTy::value_type& E = BPatchMap.FindAndConstruct(BPKey(PtrId));
   
-  assert (!HasFinalPtr(E) &&
+  assert (HasFinalPtr(E) &&
           "Cannot backpatch references.  Object must be already deserialized.");
   
   return GetFinalPtr(E);