On 10/06/2015 03:45 PM, Richard Biener wrote: > On Tue, Oct 6, 2015 at 2:41 PM, Bernd Schmidt <bschm...@redhat.com> wrote: >> On 10/06/2015 01:32 AM, Mikhail Maltsev wrote: >>> >>> gcc/ChangeLog: >>> >>> 2015-10-05 Mikhail Maltsev <malts...@gmail.com> >>> >>> * alloc-pool.h (base_pool_allocator::initialize, ::allocate, >>> ::remove): Adjust to use CHECKING_P. >> >> >> Why CHECKING_P for these and not flag_checking as elsewhere? > > Probably because they are in inline functions and thus possibly would > affect optimization. Not sure why they are inline functions in the > first place... I'd agree to using flag_checking here. > > Richard. > >> >> Bernd
Adjusted. Note: I had to include 'options.h' into 'alloc-pool.h' in order to use flag_checking. -- Regards, Mikhail Maltsev 2015-10-19 Mikhail Maltsev <malts...@gmail.com> * alloc-pool.h (base_pool_allocator ::initialize, ::allocate, ::remove): Adjust to use flag_checking.
diff --git a/gcc/alloc-pool.h b/gcc/alloc-pool.h index 70105ba..a15c25e 100644 --- a/gcc/alloc-pool.h +++ b/gcc/alloc-pool.h @@ -21,6 +21,7 @@ along with GCC; see the file COPYING3. If not see #define ALLOC_POOL_H #include "memory-block.h" +#include "options.h" // for flag_checking extern void dump_alloc_pool_statistics (void); @@ -275,15 +276,16 @@ base_pool_allocator <TBlockAllocator>::initialize () m_elts_per_block = (TBlockAllocator::block_size - header_size) / size; gcc_checking_assert (m_elts_per_block != 0); -#ifdef ENABLE_CHECKING - /* Increase the last used ID and use it for this pool. - ID == 0 is used for free elements of pool so skip it. */ - last_id++; - if (last_id == 0) - last_id++; + if (flag_checking) + { + /* Increase the last used ID and use it for this pool. + ID == 0 is used for free elements of pool so skip it. */ + last_id++; + if (last_id == 0) + last_id++; - m_id = last_id; -#endif + m_id = last_id; + } } /* Free all memory allocated for the given memory pool. */ @@ -387,10 +389,10 @@ base_pool_allocator <TBlockAllocator>::allocate () block = m_virgin_free_list; header = (allocation_pool_list*) allocation_object::get_data (block); header->next = NULL; -#ifdef ENABLE_CHECKING + /* Mark the element to be free. */ - ((allocation_object*) block)->id = 0; -#endif + if (flag_checking) + ((allocation_object*) block)->id = 0; VALGRIND_DISCARD (VALGRIND_MAKE_MEM_NOACCESS (header,size)); m_returned_free_list = header; m_virgin_free_list += m_elt_size; @@ -404,10 +406,9 @@ base_pool_allocator <TBlockAllocator>::allocate () m_returned_free_list = header->next; m_elts_free--; -#ifdef ENABLE_CHECKING /* Set the ID for element. */ - allocation_object::get_instance (header)->id = m_id; -#endif + if (flag_checking) + allocation_object::get_instance (header)->id = m_id; VALGRIND_DISCARD (VALGRIND_MAKE_MEM_UNDEFINED (header, size)); return (void *)(header); @@ -424,18 +425,18 @@ base_pool_allocator <TBlockAllocator>::remove (void *object) int size ATTRIBUTE_UNUSED; size = m_elt_size - offsetof (allocation_object, u.data); -#ifdef ENABLE_CHECKING - gcc_assert (object + gcc_checking_assert (object /* Check if we free more than we allocated, which is Bad (TM). */ && m_elts_free < m_elts_allocated /* Check whether the PTR was allocated from POOL. */ && m_id == allocation_object::get_instance (object)->id); - memset (object, 0xaf, size); - - /* Mark the element to be free. */ - allocation_object::get_instance (object)->id = 0; -#endif + if (flag_checking) + { + memset (object, 0xaf, size); + /* Mark the element to be free. */ + allocation_object::get_instance (object)->id = 0; + } header = (allocation_pool_list*) object; header->next = m_returned_free_list;