diff options
author | Dmitri Gribenko <gribozavr@gmail.com> | 2013-08-07 05:51:27 +0000 |
---|---|---|
committer | Dmitri Gribenko <gribozavr@gmail.com> | 2013-08-07 05:51:27 +0000 |
commit | 9e8eafa0f0ad36c3e4397e97b67b8245b04ba618 (patch) | |
tree | 9f4b483e7ec0ad12fbe55980ae87bb0252846457 /include | |
parent | 235089bdaefabcef9e9cde28eb3b0d8937b12a0d (diff) | |
download | external_llvm-9e8eafa0f0ad36c3e4397e97b67b8245b04ba618.zip external_llvm-9e8eafa0f0ad36c3e4397e97b67b8245b04ba618.tar.gz external_llvm-9e8eafa0f0ad36c3e4397e97b67b8245b04ba618.tar.bz2 |
YAMLTraits.h: replace DenseMap that used a bad implementation of DenseMapInfo
for StringRef with a StringMap
The bug is that the empty key compares equal to the tombstone key.
Also added an assertion to DenseMap to catch similar bugs in future.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187866 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/ADT/DenseMap.h | 3 | ||||
-rw-r--r-- | include/llvm/Support/YAMLTraits.h | 12 |
2 files changed, 5 insertions, 10 deletions
diff --git a/include/llvm/ADT/DenseMap.h b/include/llvm/ADT/DenseMap.h index d5aa864..71069ff 100644 --- a/include/llvm/ADT/DenseMap.h +++ b/include/llvm/ADT/DenseMap.h @@ -606,6 +606,9 @@ public: } void init(unsigned InitBuckets) { + assert(!KeyInfoT::isEqual(this->getEmptyKey(), this->getTombstoneKey()) && + "Bad implementation of KeyInfoT: empty key and tombstone key " + "should be different"); if (allocateBuckets(InitBuckets)) { this->BaseT::initEmpty(); } else { diff --git a/include/llvm/Support/YAMLTraits.h b/include/llvm/Support/YAMLTraits.h index 801868f..0f57f44 100644 --- a/include/llvm/Support/YAMLTraits.h +++ b/include/llvm/Support/YAMLTraits.h @@ -14,7 +14,7 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseMapInfo.h" #include "llvm/ADT/SmallVector.h" -#include "llvm/ADT/StringExtras.h" +#include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/Twine.h" @@ -760,15 +760,7 @@ private: } static inline bool classof(const MapHNode *) { return true; } - struct StrMappingInfo { - static StringRef getEmptyKey() { return StringRef(); } - static StringRef getTombstoneKey() { return StringRef(" ", 0); } - static unsigned getHashValue(StringRef const val) { - return llvm::HashString(val); } - static bool isEqual(StringRef const lhs, - StringRef const rhs) { return lhs.equals(rhs); } - }; - typedef llvm::DenseMap<StringRef, HNode*, StrMappingInfo> NameToNode; + typedef llvm::StringMap<HNode*> NameToNode; bool isValidKey(StringRef key); |