On 10/06/2015 03:45 PM, Richard Biener wrote:
> On Tue, Oct 6, 2015 at 2:41 PM, Bernd Schmidt <[email protected]> wrote:
>> On 10/06/2015 01:32 AM, Mikhail Maltsev wrote:
>>>
>>> gcc/ChangeLog:
>>>
>>> 2015-10-05 Mikhail Maltsev <[email protected]>
>>>
>>> * 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 <[email protected]>
* 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;