From 8250360a776340f1ab74ddbcebb1a4c75092d92a 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. llvm-svn: 43721 --- 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