diff options
| author | Roman Divacky <rdivacky@FreeBSD.org> | 2010-07-13 17:19:57 +0000 | 
|---|---|---|
| committer | Roman Divacky <rdivacky@FreeBSD.org> | 2010-07-13 17:19:57 +0000 | 
| commit | 66e41e3c6e8b8fbc48d5d3b4d2bd9ce0be4ecb75 (patch) | |
| tree | 9de1c5f67a98cd0e73c60838396486c984f63ac2 /lib/Support/SmallVector.cpp | |
| parent | abdf259d487163e72081a8cf4991b1617206b41e (diff) | |
Notes
Diffstat (limited to 'lib/Support/SmallVector.cpp')
| -rw-r--r-- | lib/Support/SmallVector.cpp | 21 | 
1 files changed, 12 insertions, 9 deletions
| diff --git a/lib/Support/SmallVector.cpp b/lib/Support/SmallVector.cpp index 6821382bb3c3..2e17af864155 100644 --- a/lib/Support/SmallVector.cpp +++ b/lib/Support/SmallVector.cpp @@ -21,15 +21,18 @@ void SmallVectorBase::grow_pod(size_t MinSizeInBytes, size_t TSize) {    size_t NewCapacityInBytes = 2 * capacity_in_bytes();    if (NewCapacityInBytes < MinSizeInBytes)      NewCapacityInBytes = MinSizeInBytes; -  void *NewElts = operator new(NewCapacityInBytes); -   -  // Copy the elements over.  No need to run dtors on PODs. -  memcpy(NewElts, this->BeginX, CurSizeBytes); -   -  // If this wasn't grown from the inline copy, deallocate the old space. -  if (!this->isSmall()) -    operator delete(this->BeginX); -   + +  void *NewElts; +  if (this->isSmall()) { +    NewElts = malloc(NewCapacityInBytes); + +    // Copy the elements over.  No need to run dtors on PODs. +    memcpy(NewElts, this->BeginX, CurSizeBytes); +  } else { +    // If this wasn't grown from the inline copy, grow the allocated space. +    NewElts = realloc(this->BeginX, NewCapacityInBytes); +  } +    this->EndX = (char*)NewElts+CurSizeBytes;    this->BeginX = NewElts;    this->CapacityX = (char*)this->BeginX + NewCapacityInBytes; | 
