From 6fd11c53e9d17c4dec9945bbd21b30b7a84d3f6b Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Mon, 5 Nov 2007 18:13:03 +0000 Subject: [PATCH] Fixed bug where tombstone key and empty key for DenseMap used for pointer backpatching in deserializer were improperly created and resulted in an assertion failure. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43721 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Bitcode/Deserialize.h | 5 +++-- include/llvm/Bitcode/Serialize.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h index 332a842d280..2454dca565d 100644 --- a/include/llvm/Bitcode/Deserialize.h +++ b/include/llvm/Bitcode/Deserialize.h @@ -56,13 +56,14 @@ class Deserializer { public: BPKey(unsigned PtrId) : Raw(PtrId << 1) { assert (PtrId > 0); } + BPKey(unsigned code, unsigned) : Raw(code) {} void MarkFinal() { Raw |= 0x1; } bool hasFinalPtr() const { return Raw & 0x1 ? true : false; } unsigned getID() const { return Raw >> 1; } - static inline BPKey getEmptyKey() { return 0; } - static inline BPKey getTombstoneKey() { return 1; } + static inline BPKey getEmptyKey() { return BPKey(0,0); } + static inline BPKey getTombstoneKey() { return BPKey(1,0); } static inline unsigned getHashValue(const BPKey& K) { return K.Raw & ~0x1; } static bool isEqual(const BPKey& K1, const BPKey& K2) { diff --git a/include/llvm/Bitcode/Serialize.h b/include/llvm/Bitcode/Serialize.h index be5adb85eaa..197ab9f33d6 100644 --- a/include/llvm/Bitcode/Serialize.h +++ b/include/llvm/Bitcode/Serialize.h @@ -32,6 +32,7 @@ class Serializer { public: Serializer(BitstreamWriter& stream, unsigned BlockID = 0); + ~Serializer(); template