Don't allow the pool allocator to be configured to allocate zero-sized objects

PR bootstrap/87747 would have been significantly easier to track down if
the pool allocator had faulted an attempt to configure it to allocate
zero-sized objects.  Instead, this slipped through and we later hit
memory corruption when the assumed size turned out to be different to
the configured size.

While, theoretically, there might be a use case for this, it seems
unlikely to me that GCC would have such a use.  So this patch adds a
checking assert that the object size is not zero.

	* alloc-pool.h (base_pool_allocator <TBlockAllocator>::initialize):
	Assert that the allocation size is not zero.

From-SVN: r265620
This commit is contained in:
Richard Earnshaw 2018-10-30 11:33:24 +00:00 committed by Richard Earnshaw
parent 22e4f1fb6c
commit 29f6f2d244
2 changed files with 6 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2018-10-30 Richard Earnshaw <rearnsha@arm.com>
* alloc-pool.h (base_pool_allocator <TBlockAllocator>::initialize):
Assert that the allocation size is not zero.
2018-10-30 Richard Biener <rguenther@suse.de>
PR tree-optimization/87800

View File

@ -256,6 +256,7 @@ base_pool_allocator <TBlockAllocator>::initialize ()
size_t size = m_size;
gcc_checking_assert (m_name);
gcc_checking_assert (m_size);
/* Make size large enough to store the list header. */
if (size < sizeof (allocation_pool_list*))