[ADT] Assert that SmallVectorBase::grow_pod() successfully reallocates memory.
authorDaniel Sanders <daniel.sanders@imgtec.com>
Tue, 9 Jun 2015 09:47:46 +0000 (09:47 +0000)
committerDaniel Sanders <daniel.sanders@imgtec.com>
Tue, 9 Jun 2015 09:47:46 +0000 (09:47 +0000)
Summary:
If malloc/realloc fails then the SmallVector becomes unusable since begin() and
end() will return NULL. This is unlikely to occur but was the cause of recent
bugpoint test failures on my machine.

It is not clear whether not checking for malloc/realloc failure is a deliberate
decision and adding checks has the potential to impact compiler performance.
Therefore, this patch only adds the check to builds with assertions enabled for
the moment.

Reviewers: bkramer

Reviewed By: bkramer

Subscribers: bkramer, llvm-commits

Differential Revision: http://reviews.llvm.org/D9520

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239392 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/SmallVector.cpp

index f9c0e78270c9195a23e83498b4e1489474c3f4b0..b931505bd6a133d8d01dfcddba396e802b5e6fb2 100644 (file)
@@ -33,6 +33,7 @@ void SmallVectorBase::grow_pod(void *FirstEl, size_t MinSizeInBytes,
     // If this wasn't grown from the inline copy, grow the allocated space.
     NewElts = realloc(this->BeginX, NewCapacityInBytes);
   }
+  assert(NewElts && "Out of memory");
 
   this->EndX = (char*)NewElts+CurSizeBytes;
   this->BeginX = NewElts;