Use realloc() to (potentially) resize the contents of SmallPtrSet in place.
authorOwen Anderson <resistor@mac.com>
Mon, 16 Jul 2007 21:27:44 +0000 (21:27 +0000)
committerOwen Anderson <resistor@mac.com>
Mon, 16 Jul 2007 21:27:44 +0000 (21:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39926 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/SmallPtrSet.h
lib/Support/SmallPtrSet.cpp

index 9f975af07c56b2a62a7dc6de9dada70c17e6255e..27cc5535c1da18f90580bf9c4003911e6851bfc7 100644 (file)
@@ -69,7 +69,7 @@ public:
   }
   ~SmallPtrSetImpl() {
     if (!isSmall())
-      delete[] CurArray;
+      free(CurArray);
   }
   
   bool empty() const { return size() == 0; }
index e956cbcc9d3f796468b250ae958a4d4370b3ab5b..5c672375c6b74e37c0a2900f99d165ab5fcdc51b 100644 (file)
@@ -114,7 +114,8 @@ void SmallPtrSetImpl::Grow() {
   bool WasSmall = isSmall();
   
   // Install the new array.  Clear all the buckets to empty.
-  CurArray = new void*[NewSize+1];
+  CurArray = (void**)malloc(sizeof(void*) * (NewSize+1));
+  assert(CurArray && "Failed to allocate memory?");
   CurArraySize = NewSize;
   memset(CurArray, -1, NewSize*sizeof(void*));
   
@@ -140,7 +141,7 @@ void SmallPtrSetImpl::Grow() {
         *const_cast<void**>(FindBucketFor(Elt)) = Elt;
     }
     
-    delete [] OldBuckets;
+    free(OldBuckets);
     NumTombstones = 0;
   }
 }
@@ -156,7 +157,8 @@ SmallPtrSetImpl::SmallPtrSetImpl(const SmallPtrSetImpl& that) {
     memcpy(CurArray, that.CurArray, sizeof(void*)*(CurArraySize+1));
   } else {
     CurArraySize = that.NumElements < 64 ? 128 : that.CurArraySize*2;
-    CurArray = new void*[CurArraySize+1];
+    CurArray = (void**)malloc(sizeof(void*) * (CurArraySize+1));
+    assert(CurArray && "Failed to allocate memory?");
     memset(CurArray, -1, CurArraySize*sizeof(void*));
     
     // The end pointer, always valid, is set to a valid element to help the
@@ -183,17 +185,14 @@ void SmallPtrSetImpl::CopyFrom(const SmallPtrSetImpl &RHS) {
   NumElements = RHS.NumElements;
   NumTombstones = RHS.NumTombstones;
   
-  // If we're not currently small, and we don't have the same heap size,
-  // free our heap allocated storage
-  if (!isSmall() && CurArraySize != RHS.CurArraySize)
-    delete [] CurArray;
-  
   // If we're becoming small, prepare to insert into our stack space
   if (RHS.isSmall())
     CurArray = &SmallArray[0];
   // Otherwise, allocate new heap space (unless we were the same size)
-  else if (CurArraySize != RHS.CurArraySize)
-    CurArray = new void*[RHS.CurArraySize+1];
+  else if (CurArraySize != RHS.CurArraySize) {
+    CurArray = (void**)realloc(CurArray, sizeof(void*)*(RHS.CurArraySize+1));
+    assert(CurArray && "Failed to allocate memory?");
+  }
   
   // Copy over the new array size
   CurArraySize = RHS.CurArraySize;