Zig Version
0.13.0-dev.211+6a65561e3
Steps to Reproduce and Observed Behavior
This test case:
const std = @import("std");
test "retain metadata and never unmap" {
var gpa = std.heap.GeneralPurposeAllocator(.{
.safety = true,
.never_unmap = true,
.retain_metadata = true,
}){};
defer std.debug.assert(gpa.deinit() == .ok);
const allocator = gpa.allocator();
const alloc = try allocator.alloc(u8, 8);
allocator.free(alloc);
const alloc2 = try allocator.alloc(u8, 8);
allocator.free(alloc2);
}
fails with
C:\Users\Ryan\Programming\Zig\zig\lib\std\debug.zig:403:14: 0xcb146d in assert (test.exe.obj)
if (!ok) unreachable; // assertion failure
^
C:\Users\Ryan\Programming\Zig\zig\lib\std\treap.zig:288:45: 0xcbf017 in next (test.exe.obj)
std.debug.assert(previous == current.children[1]);
^
C:\Users\Ryan\Programming\Zig\zig\lib\std\heap\general_purpose_allocator.zig:443:37: 0xcb4276 in freeRetainedMetadata (test.exe.obj)
while (empty_it.next()) |node| {
^
C:\Users\Ryan\Programming\Zig\zig\lib\std\heap\general_purpose_allocator.zig:475:42: 0xcb135d in deinit (test.exe.obj)
self.freeRetainedMetadata();
^
C:\Users\Ryan\Programming\Zig\tmp\doublefree.zig:9:38: 0xcb1164 in test.retain metadata and never unmap (test.exe.obj)
defer std.debug.assert(gpa.deinit() == .ok);
^
This is likely a regression introduced during #17383
Expected Behavior
The test to pass
Zig Version
0.13.0-dev.211+6a65561e3
Steps to Reproduce and Observed Behavior
This test case:
fails with
This is likely a regression introduced during #17383
Expected Behavior
The test to pass