Enhance pool allocator
authorMartin Liska <mliska@suse.cz>
Tue, 10 Nov 2015 12:27:33 +0000 (13:27 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Tue, 10 Nov 2015 12:27:33 +0000 (12:27 +0000)
* alloc-pool.h (allocate_raw): New function.
(operator new (size_t, object_allocator<T> &a)): Use the
function instead of object_allocator::allocate).

From-SVN: r230105

gcc/ChangeLog
gcc/alloc-pool.h

index 0763ca1719c524d526cba780fb21671330f580ac..103b87283f069b0e32af03b43bb11c4adba01365 100644 (file)
@@ -1,3 +1,9 @@
+2015-11-10  Martin Liska  <mliska@suse.cz>
+
+       * alloc-pool.h (allocate_raw): New function.
+       (operator new (size_t, object_allocator<T> &a)): Use the
+       function instead of object_allocator::allocate).
+
 2015-11-10  Ilya Enkovich  <enkovich.gnu@gmail.com>
 
        * config/i386/sse.md (HALFMASKMODE): New attribute.
index bf9b0ebd6ee4a4f669f0be9785f65bc2cacd25a3..38aff2849970829097c62a0f33420cc4049a8d21 100644 (file)
@@ -477,12 +477,25 @@ public:
     m_allocator.release_if_empty ();
   }
 
+
+  /* Allocate memory for instance of type T and call a default constructor.  */
+
   inline T *
   allocate () ATTRIBUTE_MALLOC
   {
     return ::new (m_allocator.allocate ()) T;
   }
 
+  /* Allocate memory for instance of type T and return void * that
+     could be used in situations where a default constructor is not provided
+     by the class T.  */
+
+  inline void *
+  allocate_raw () ATTRIBUTE_MALLOC
+  {
+    return m_allocator.allocate ();
+  }
+
   inline void
   remove (T *object)
   {
@@ -528,7 +541,7 @@ template <typename T>
 inline void *
 operator new (size_t, object_allocator<T> &a)
 {
-  return a.allocate ();
+  return a.allocate_raw ();
 }
 
 /* Hashtable mapping alloc_pool names to descriptors.  */