Fix a bug in bitstream writer handling abbrevs, add value symtab
authorChris Lattner <sabre@nondot.org>
Mon, 23 Apr 2007 20:34:46 +0000 (20:34 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 23 Apr 2007 20:34:46 +0000 (20:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36373 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bitcode/BitstreamWriter.h
include/llvm/Bitcode/LLVMBitCodes.h

index aa2a653e5328aaf2856e6957778ee2d878341eb4..eaf2e4317c01452295fc13a3f87598524252355c 100644 (file)
@@ -147,12 +147,8 @@ public:
     EmitVBR(CodeLen, bitc::CodeLenWidth);
     FlushToWord();
     BlockScope.push_back(Block(CurCodeSize, Out.size()/4));
-    
-    // Delete all abbrevs.
-    for (unsigned i = 0, e = CurAbbrevs.size(); i != e; ++i)
-      delete CurAbbrevs[i];
-    
     BlockScope.back().PrevAbbrevs.swap(CurAbbrevs);
+    
     // Emit a placeholder, which will be replaced when the block is popped.
     Emit(0, bitc::BlockSizeWidth);
     
@@ -161,6 +157,11 @@ public:
   
   void ExitBlock() {
     assert(!BlockScope.empty() && "Block scope imbalance!");
+    
+    // Delete all abbrevs.
+    for (unsigned i = 0, e = CurAbbrevs.size(); i != e; ++i)
+      delete CurAbbrevs[i];
+    
     const Block &B = BlockScope.back();
     
     // Block tail:
index bdabc2e77e31281fd8b2a2378af39a5fdbec36be..bf59893153e364bb0bd088c987116c489bdc363c 100644 (file)
@@ -33,7 +33,7 @@ namespace bitc {
     GLOBALCONSTANTS_BLOCK_ID = 3,
     FUNCTION_BLOCK_ID        = 4,
     TYPE_SYMTAB_BLOCK_ID     = 5,
-    GLOBAL_SYMTAB_BLOCK_ID   = 6
+    VALUE_SYMTAB_BLOCK_ID    = 6
   };
   
   
@@ -81,6 +81,11 @@ namespace bitc {
     TST_ENTRY_CODE = 1     // TST_ENTRY: [typeid, namelen, namechar x N]
   };
   
+  // The value symbol table only has one code (VST_ENTRY_CODE).
+  enum ValueSymtabCodes {
+    VST_ENTRY_CODE = 1     // VST_ENTRY: [valid, namelen, namechar x N]
+  };
+  
 } // End bitc namespace
 } // End llvm namespace