Re: [PATCH 08/35] Change use to type-based pool allocator in asan.c.

2015-05-27 Thread Jeff Law

On 05/27/2015 07:56 AM, mliska wrote:

gcc/ChangeLog:

2015-04-30  Martin Liska  mli...@suse.cz

* asan.c (asan_mem_ref_get_alloc_pool):Use new type-based pool 
allocator.
(asan_mem_ref_new) Likewise.
(free_mem_ref_resources) Likewise.
Presumably the inconsequential whitespace changes are removing trailing 
whitespace or something similar.


OK.
jeff



[PATCH 08/35] Change use to type-based pool allocator in asan.c.

2015-05-27 Thread mliska
gcc/ChangeLog:

2015-04-30  Martin Liska  mli...@suse.cz

* asan.c (asan_mem_ref_get_alloc_pool):Use new type-based pool 
allocator.
(asan_mem_ref_new) Likewise.
(free_mem_ref_resources) Likewise.
---
 gcc/asan.c | 44 
 1 file changed, 20 insertions(+), 24 deletions(-)

diff --git a/gcc/asan.c b/gcc/asan.c
index 479301a..19c8d95 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -176,7 +176,7 @@ along with GCC; see the file COPYING3.  If not see
 
where '(...){n}' means the content inside the parenthesis occurs 'n'
times, with 'n' being the number of variables on the stack.
- 
+
  3/ The following 8 bytes contain the PC of the current function which
  will be used by the run-time library to print an error message.
 
@@ -281,7 +281,7 @@ bool
 set_asan_shadow_offset (const char *val)
 {
   char *endp;
-  
+
   errno = 0;
 #ifdef HAVE_LONG_LONG
   asan_shadow_offset_value = strtoull (val, endp, 0);
@@ -372,23 +372,24 @@ struct asan_mem_ref
 
   /* The size of the access.  */
   HOST_WIDE_INT access_size;
-};
 
-static alloc_pool asan_mem_ref_alloc_pool;
+  /* Pool allocation new operator.  */
+  inline void *operator new (size_t)
+  {
+return pool.allocate ();
+  }
 
-/* This creates the alloc pool used to store the instances of
-   asan_mem_ref that are stored in the hash table asan_mem_ref_ht.  */
+  /* Delete operator utilizing pool allocation.  */
+  inline void operator delete (void *ptr)
+  {
+pool.remove((asan_mem_ref *) ptr);
+  }
 
-static alloc_pool
-asan_mem_ref_get_alloc_pool ()
-{
-  if (asan_mem_ref_alloc_pool == NULL)
-asan_mem_ref_alloc_pool = create_alloc_pool (asan_mem_ref,
-sizeof (asan_mem_ref),
-10);
-  return asan_mem_ref_alloc_pool;
-
-}
+  /* Memory allocation pool.  */
+  static pool_allocatorasan_mem_ref pool;
+};
+
+pool_allocatorasan_mem_ref asan_mem_ref::pool (asan_mem_ref, 10);
 
 /* Initializes an instance of asan_mem_ref.  */
 
@@ -408,8 +409,7 @@ asan_mem_ref_init (asan_mem_ref *ref, tree start, 
HOST_WIDE_INT access_size)
 static asan_mem_ref*
 asan_mem_ref_new (tree start, HOST_WIDE_INT access_size)
 {
-  asan_mem_ref *ref =
-(asan_mem_ref *) pool_alloc (asan_mem_ref_get_alloc_pool ());
+  asan_mem_ref *ref = new asan_mem_ref;
 
   asan_mem_ref_init (ref, start, access_size);
   return ref;
@@ -501,11 +501,7 @@ free_mem_ref_resources ()
   delete asan_mem_ref_ht;
   asan_mem_ref_ht = NULL;
 
-  if (asan_mem_ref_alloc_pool)
-{
-  free_alloc_pool (asan_mem_ref_alloc_pool);
-  asan_mem_ref_alloc_pool = NULL;
-}
+  asan_mem_ref::pool.release ();
 }
 
 /* Return true iff the memory reference REF has been instrumented.  */
@@ -2035,7 +2031,7 @@ maybe_instrument_assignment (gimple_stmt_iterator *iter)
 is_store);
   is_instrumented = true;
 }
- 
+
   if (gimple_assign_load_p (s))
 {
   ref_expr = gimple_assign_rhs1 (s);
-- 
2.1.4