Allocator.free: document zero-length behavior

It wasn't immediately clear from the implementation whether passing
zero-length memory to free() was undefined behavior or intentionally
supported. Since ArrayList and other core data structures rely on
this behavior working correctly, this should be explicitly documented
as part of the public API contract.
This commit is contained in:
Ilia Choly 2024-11-03 09:47:57 -05:00 committed by Andrew Kelley
parent c2db5d9cd1
commit e2f24a2d70

View file

@ -301,8 +301,9 @@ pub fn reallocAdvanced(
return mem.bytesAsSlice(T, new_bytes); return mem.bytesAsSlice(T, new_bytes);
} }
/// Free an array allocated with `alloc`. To free a single item, /// Free an array allocated with `alloc`.
/// see `destroy`. /// If memory has length 0, free is a no-op.
/// To free a single item, see `destroy`.
pub fn free(self: Allocator, memory: anytype) void { pub fn free(self: Allocator, memory: anytype) void {
const Slice = @typeInfo(@TypeOf(memory)).pointer; const Slice = @typeInfo(@TypeOf(memory)).pointer;
const bytes = mem.sliceAsBytes(memory); const bytes = mem.sliceAsBytes(memory);