diff options
author | Torok Edwin <edwintorok@gmail.com> | 2009-07-21 18:01:37 +0000 |
---|---|---|
committer | Torok Edwin <edwintorok@gmail.com> | 2009-07-21 18:01:37 +0000 |
commit | d06c59821a1ca0191ea8a326a18509808a02ed03 (patch) | |
tree | 91ba893767424d504886418055d476c15bbb6679 | |
parent | e4d8408c572a3667e49d32b95c31b455bcec4a45 (diff) | |
download | external_llvm-d06c59821a1ca0191ea8a326a18509808a02ed03.zip external_llvm-d06c59821a1ca0191ea8a326a18509808a02ed03.tar.gz external_llvm-d06c59821a1ca0191ea8a326a18509808a02ed03.tar.bz2 |
Add freed memory poisoning in !NDEBUG mode for DenseMap.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76597 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ADT/DenseMap.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/include/llvm/ADT/DenseMap.h b/include/llvm/ADT/DenseMap.h index e18be89..c8a90eb 100644 --- a/include/llvm/ADT/DenseMap.h +++ b/include/llvm/ADT/DenseMap.h @@ -17,6 +17,7 @@ #include "llvm/Support/PointerLikeTypeTraits.h" #include "llvm/Support/MathExtras.h" #include <cassert> +#include <cstring> #include <utility> #include <new> @@ -160,6 +161,9 @@ public: P->second.~ValueT(); P->first.~KeyT(); } +#ifndef NDEBUG + memset(Buckets, 0x5a, sizeof(BucketT)*NumBuckets); +#endif operator delete(Buckets); } @@ -318,8 +322,12 @@ private: NumEntries = other.NumEntries; NumTombstones = other.NumTombstones; - if (NumBuckets) + if (NumBuckets) { +#ifndef NDEBUG + memset(Buckets, 0x5a, sizeof(BucketT)*NumBuckets); +#endif operator delete(Buckets); + } Buckets = static_cast<BucketT*>(operator new(sizeof(BucketT) * other.NumBuckets)); @@ -465,6 +473,9 @@ private: B->first.~KeyT(); } +#ifndef NDEBUG + memset(OldBuckets, 0x5a, sizeof(BucketT)*OldNumBuckets); +#endif // Free the old table. operator delete(OldBuckets); } @@ -495,6 +506,9 @@ private: B->first.~KeyT(); } +#ifndef NDEBUG + memset(OldBuckets, 0x5a, sizeof(BucketT)*OldNumBuckets); +#endif // Free the old table. operator delete(OldBuckets); |