Added default creation of root-level block by bitstream serializer.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43732 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Bitcode/Reader/Deserialize.cpp b/lib/Bitcode/Reader/Deserialize.cpp
index 0482b1f..31d180f 100644
--- a/lib/Bitcode/Reader/Deserialize.cpp
+++ b/lib/Bitcode/Reader/Deserialize.cpp
@@ -47,9 +47,28 @@
   // 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 @@
 
   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);