Enable new[] on llvm::BumpPtrAllocator.
authorDmitri Gribenko <gribozavr@gmail.com>
Fri, 6 Jul 2012 00:25:39 +0000 (00:25 +0000)
committerDmitri Gribenko <gribozavr@gmail.com>
Fri, 6 Jul 2012 00:25:39 +0000 (00:25 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159789 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Allocator.h

index a2ad24ffead93bd995f50101e9c37063e30e9960..c2dd75d48834a9fd2d92aae945f5480c0f06709e 100644 (file)
@@ -239,4 +239,21 @@ inline void *operator new(size_t Size, llvm::BumpPtrAllocator &Allocator) {
 
 inline void operator delete(void *, llvm::BumpPtrAllocator &) {}
 
+inline void *operator new[](size_t Size, llvm::BumpPtrAllocator &Allocator) {
+  struct S {
+    char c;
+    union {
+      double D;
+      long double LD;
+      long long L;
+      void *P;
+    } x;
+  };
+  return Allocator.Allocate(Size, std::min((size_t)llvm::NextPowerOf2(Size),
+                                           offsetof(S, x)));
+}
+
+inline void operator delete[](void *Ptr, llvm::BumpPtrAllocator &C, size_t) {
+}
+
 #endif // LLVM_SUPPORT_ALLOCATOR_H