diff options
author | Chris Lattner <sabre@nondot.org> | 2007-10-09 05:42:12 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-10-09 05:42:12 +0000 |
commit | 4dbdbe1f7598ddffe1b54a725cef7cc45e4b847d (patch) | |
tree | 5bd6d5d6e2f8008fbd58989313750d201789b6bb /include | |
parent | f08a3e802ff7a6acd38f5268df61579f1666689c (diff) | |
download | external_llvm-4dbdbe1f7598ddffe1b54a725cef7cc45e4b847d.zip external_llvm-4dbdbe1f7598ddffe1b54a725cef7cc45e4b847d.tar.gz external_llvm-4dbdbe1f7598ddffe1b54a725cef7cc45e4b847d.tar.bz2 |
Fix problems where DenseMap used operator!= instead of correctly
calling the traits implementation of isEqual.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42782 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/ADT/DenseMap.h | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/include/llvm/ADT/DenseMap.h b/include/llvm/ADT/DenseMap.h index bee2a3e..91f00f9 100644 --- a/include/llvm/ADT/DenseMap.h +++ b/include/llvm/ADT/DenseMap.h @@ -75,7 +75,8 @@ public: ~DenseMap() { const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey(); for (BucketT *P = Buckets, *E = Buckets+NumBuckets; P != E; ++P) { - if (P->first != EmptyKey && P->first != TombstoneKey) + if (!KeyInfoT::isEqual(P->first, EmptyKey) && + !KeyInfoT::isEqual(P->first, TombstoneKey)) P->second.~ValueT(); P->first.~KeyT(); } @@ -113,8 +114,8 @@ public: const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey(); for (BucketT *P = Buckets, *E = Buckets+NumBuckets; P != E; ++P) { - if (P->first != EmptyKey) { - if (P->first != TombstoneKey) { + if (!KeyInfoT::isEqual(P->first, EmptyKey)) { + if (!KeyInfoT::isEqual(P->first, TombstoneKey)) { P->second.~ValueT(); --NumEntries; } @@ -192,7 +193,8 @@ private: if (NumBuckets != 0 && (!KeyInfoT::isPod() || !ValueInfoT::isPod())) { const KeyT EmptyKey = getEmptyKey(), TombstoneKey = getTombstoneKey(); for (BucketT *P = Buckets, *E = Buckets+NumBuckets; P != E; ++P) { - if (P->first != EmptyKey && P->first != TombstoneKey) + if (!KeyInfoT::isEqual(P->first, EmptyKey) && + !KeyInfoT::isEqual(P->first, TombstoneKey)) P->second.~ValueT(); P->first.~KeyT(); } @@ -211,8 +213,8 @@ private: else for (size_t i = 0; i < other.NumBuckets; ++i) { new (Buckets[i].first) KeyT(other.Buckets[i].first); - if (Buckets[i].first != getEmptyKey() && - Buckets[i].first != getTombstoneKey()) + if (!KeyInfoT::isEqual(Buckets[i].first, getEmptyKey()) && + !KeyInfoT::isEqual(Buckets[i].first, getTombstoneKey())) new (&Buckets[i].second) ValueT(other.Buckets[i].second); } NumBuckets = other.NumBuckets; @@ -237,7 +239,7 @@ private: ++NumEntries; // If we are writing over a tombstone, remember this. - if (TheBucket->first != getEmptyKey()) + if (!KeyInfoT::isEqual(TheBucket->first, getEmptyKey())) --NumTombstones; TheBucket->first = Key; @@ -268,7 +270,8 @@ private: BucketT *FoundTombstone = 0; const KeyT EmptyKey = getEmptyKey(); const KeyT TombstoneKey = getTombstoneKey(); - assert(Val != EmptyKey && Val != TombstoneKey && + assert(!KeyInfoT::isEqual(Val, EmptyKey) && + !KeyInfoT::isEqual(Val, TombstoneKey) && "Empty/Tombstone value shouldn't be inserted into map!"); while (1) { @@ -331,7 +334,8 @@ private: // Insert all the old elements. const KeyT TombstoneKey = getTombstoneKey(); for (BucketT *B = OldBuckets, *E = OldBuckets+OldNumBuckets; B != E; ++B) { - if (B->first != EmptyKey && B->first != TombstoneKey) { + if (!KeyInfoT::isEqual(B->first, EmptyKey) && + !KeyInfoT::isEqual(B->first, TombstoneKey)) { // Insert the key/value into the new table. BucketT *DestBucket; bool FoundVal = LookupBucketFor(B->first, DestBucket); @@ -368,7 +372,8 @@ private: // Free the old buckets. const KeyT TombstoneKey = getTombstoneKey(); for (BucketT *B = OldBuckets, *E = OldBuckets+OldNumBuckets; B != E; ++B) { - if (B->first != EmptyKey && B->first != TombstoneKey) { + if (!KeyInfoT::isEqual(B->first, EmptyKey) && + !KeyInfoT::isEqual(B->first, TombstoneKey)) { // Free the value. B->second.~ValueT(); } |