Disable an always_inline with GCC in debug mode.
Most compilers are happy if you say always-inline but they can't. GCC will complain. Here, we have two mutually recursive functions that are marked as always inline. In an optimised build, one is inlined into the other and then becomes a tail-recursive function that should inline the tail call. Inlining the tail call can be done by simply jumping to the start of the function and so everything is fine. In a debug build, the second transform doesn't happen and so we're left with a call to an always-inline function.
This commit is contained in:
@@ -1366,8 +1366,15 @@ namespace snmalloc
|
||||
large_allocator.dealloc(slab, large_class);
|
||||
}
|
||||
|
||||
SNMALLOC_FAST_PATH void
|
||||
remote_dealloc(RemoteAllocator* target, void* p, sizeclass_t sizeclass)
|
||||
#if defined(__GNUC__) && !defined(__clang__) && !defined(__OPTIMIZE__)
|
||||
// Don't force this to be always inlined in debug builds with GCC, because
|
||||
// it will fail and then raise an error.
|
||||
inline
|
||||
#else
|
||||
SNMALLOC_FAST_PATH
|
||||
#endif
|
||||
void
|
||||
remote_dealloc(RemoteAllocator* target, void* p, sizeclass_t sizeclass)
|
||||
{
|
||||
MEASURE_TIME(remote_dealloc, 4, 16);
|
||||
assert(target->id() != id());
|
||||
|
||||
Reference in New Issue
Block a user