aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-04-23 20:34:46 +0000
committerChris Lattner <sabre@nondot.org>2007-04-23 20:34:46 +0000
commit73f3fd775f7484bc2de080a494a08f019483547f (patch)
treeb173a1976941a94b29696a9e639ac7e0eba04b5e
parent56c42ef3e43f8eb75c435e781d0ac8251c7588a1 (diff)
Fix a bug in bitstream writer handling abbrevs, add value symtab
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36373 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Bitcode/BitstreamWriter.h11
-rw-r--r--include/llvm/Bitcode/LLVMBitCodes.h7
2 files changed, 12 insertions, 6 deletions
diff --git a/include/llvm/Bitcode/BitstreamWriter.h b/include/llvm/Bitcode/BitstreamWriter.h
index aa2a653e53..eaf2e4317c 100644
--- a/include/llvm/Bitcode/BitstreamWriter.h
+++ b/include/llvm/Bitcode/BitstreamWriter.h
@@ -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:
diff --git a/include/llvm/Bitcode/LLVMBitCodes.h b/include/llvm/Bitcode/LLVMBitCodes.h
index bdabc2e77e..bf59893153 100644
--- a/include/llvm/Bitcode/LLVMBitCodes.h
+++ b/include/llvm/Bitcode/LLVMBitCodes.h
@@ -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