forked from OSchip/llvm-project
Fix llvm::BumpPtrAllocatorImpl::Reset()
BumpPtrAllocator's Reset wouldn't clear CustomSizedSlabs if Slabs.size() == 0. Patch by Kal <b17c0de@gmail.com>! llvm-svn: 237588
This commit is contained in:
parent
715b27f058
commit
da5ddff74a
|
@ -187,6 +187,9 @@ public:
|
|||
/// \brief Deallocate all but the current slab and reset the current pointer
|
||||
/// to the beginning of it, freeing all memory allocated so far.
|
||||
void Reset() {
|
||||
DeallocateCustomSizedSlabs();
|
||||
CustomSizedSlabs.clear();
|
||||
|
||||
if (Slabs.empty())
|
||||
return;
|
||||
|
||||
|
@ -198,8 +201,6 @@ public:
|
|||
// Deallocate all but the first slab, and deallocate all custom-sized slabs.
|
||||
DeallocateSlabs(std::next(Slabs.begin()), Slabs.end());
|
||||
Slabs.erase(std::next(Slabs.begin()), Slabs.end());
|
||||
DeallocateCustomSizedSlabs();
|
||||
CustomSizedSlabs.clear();
|
||||
}
|
||||
|
||||
/// \brief Allocate space at the specified alignment.
|
||||
|
|
|
@ -61,6 +61,13 @@ TEST(AllocatorTest, ThreeSlabs) {
|
|||
// again.
|
||||
TEST(AllocatorTest, TestReset) {
|
||||
BumpPtrAllocator Alloc;
|
||||
|
||||
// Allocate something larger than the SizeThreshold=4096.
|
||||
(void)Alloc.Allocate(5000, 1);
|
||||
Alloc.Reset();
|
||||
// Calling Reset should free all CustomSizedSlabs.
|
||||
EXPECT_EQ(0u, Alloc.GetNumSlabs());
|
||||
|
||||
Alloc.Allocate(3000, 1);
|
||||
EXPECT_EQ(1U, Alloc.GetNumSlabs());
|
||||
Alloc.Allocate(3000, 1);
|
||||
|
|
Loading…
Reference in New Issue