diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 | 
| commit | 044eb2f6afba375a914ac9d8024f8f5142bb912e (patch) | |
| tree | 1475247dc9f9fe5be155ebd4c9069c75aadf8c20 /lib/Support/FoldingSet.cpp | |
| parent | eb70dddbd77e120e5d490bd8fbe7ff3f8fa81c6b (diff) | |
Notes
Diffstat (limited to 'lib/Support/FoldingSet.cpp')
| -rw-r--r-- | lib/Support/FoldingSet.cpp | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/lib/Support/FoldingSet.cpp b/lib/Support/FoldingSet.cpp index 4496d06a15f3..942379549039 100644 --- a/lib/Support/FoldingSet.cpp +++ b/lib/Support/FoldingSet.cpp @@ -215,6 +215,10 @@ static void **GetBucketFor(unsigned Hash, void **Buckets, unsigned NumBuckets) {  /// AllocateBuckets - Allocated initialized bucket memory.  static void **AllocateBuckets(unsigned NumBuckets) {    void **Buckets = static_cast<void**>(calloc(NumBuckets+1, sizeof(void*))); + +  if (Buckets == nullptr) +    report_bad_alloc_error("Allocation of Buckets failed."); +      // Set the very last bucket to be a non-null "pointer".    Buckets[NumBuckets] = reinterpret_cast<void*>(-1);    return Buckets; @@ -271,10 +275,11 @@ void FoldingSetBase::GrowBucketCount(unsigned NewBucketCount) {    assert(isPowerOf2_32(NewBucketCount) && "Bad bucket count!");    void **OldBuckets = Buckets;    unsigned OldNumBuckets = NumBuckets; -  NumBuckets = NewBucketCount;    // Clear out new buckets. -  Buckets = AllocateBuckets(NumBuckets); +  Buckets = AllocateBuckets(NewBucketCount); +  // Set NumBuckets only if allocation of new buckets was succesful +  NumBuckets = NewBucketCount;     NumNodes = 0;    // Walk the old buckets, rehashing nodes into their new place. | 
