SP: Allocator::large_alloc return CapPtr<>
Document and suppress MSVC's confusion with CapPtr<>'s constructor (the suppression has to happen at the definition, not the use, of the constructor) in the case of never-needs-initialization Allocator-s.
This commit is contained in:
committed by
Nathaniel Wesley Filardo
parent
e31751fc94
commit
3541a0cfe1
@@ -150,7 +150,7 @@ namespace snmalloc
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
handle_message_queue();
|
handle_message_queue();
|
||||||
return large_alloc<zero_mem>(size);
|
return large_alloc<zero_mem>(size).unsafe_capptr;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -200,7 +200,7 @@ namespace snmalloc
|
|||||||
return medium_alloc<zero_mem>(sizeclass, rsize, size);
|
return medium_alloc<zero_mem>(sizeclass, rsize, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
return large_alloc<zero_mem>(size);
|
return large_alloc<zero_mem>(size).unsafe_capptr;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1485,14 +1485,17 @@ namespace snmalloc
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<ZeroMem zero_mem>
|
template<ZeroMem zero_mem>
|
||||||
void* large_alloc(size_t size)
|
CapPtr<void, CBArena> large_alloc(size_t size)
|
||||||
{
|
{
|
||||||
if (NeedsInitialisation(this))
|
if (NeedsInitialisation(this))
|
||||||
{
|
{
|
||||||
return InitThreadAllocator([size](void* alloc) {
|
// MSVC-vs-CapPtr triggering; xref CapPtr's constructor
|
||||||
return reinterpret_cast<Allocator*>(alloc)->large_alloc<zero_mem>(
|
void* ret = InitThreadAllocator([size](void* alloc) {
|
||||||
size);
|
CapPtr<void, CBArena> ret =
|
||||||
|
reinterpret_cast<Allocator*>(alloc)->large_alloc<zero_mem>(size);
|
||||||
|
return ret.unsafe_capptr;
|
||||||
});
|
});
|
||||||
|
return CapPtr<void, CBArena>(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size_bits = bits::next_pow2_bits(size);
|
size_t size_bits = bits::next_pow2_bits(size);
|
||||||
@@ -1513,7 +1516,7 @@ namespace snmalloc
|
|||||||
stats().alloc_request(size);
|
stats().alloc_request(size);
|
||||||
stats().large_alloc(large_class);
|
stats().large_alloc(large_class);
|
||||||
}
|
}
|
||||||
return p.unsafe_capptr;
|
return p.as_void();
|
||||||
}
|
}
|
||||||
|
|
||||||
void large_dealloc_unchecked(
|
void large_dealloc_unchecked(
|
||||||
|
|||||||
Reference in New Issue
Block a user