From 6a4333ebf77d390cd0b94fd5f0a528db4768259e Mon Sep 17 00:00:00 2001 From: youdi323323 Date: Fri, 3 Oct 2025 07:45:42 +0900 Subject: [PATCH 1/5] Fix --- lib/std/multi_array_list.zig | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index ec4b0b72e1c3..4470d44814e4 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -614,7 +614,7 @@ pub fn MultiArrayList(comptime T: type) type { .name = fields[i].name ++ "_ptr", .type = *fields[i].type, .default_value_ptr = null, - .is_comptime = fields[i].is_comptime, + .is_comptime = if (fields[i].type == void) false else fields[i].is_comptime, .alignment = fields[i].alignment, }; break :entry @Type(.{ .@"struct" = .{ @@ -1082,3 +1082,15 @@ test "orderedRemoveMany" { list.orderedRemoveMany(&.{0}); try testing.expectEqualSlices(usize, &.{}, list.items(.x)); } + +test "value as a tuple that containing void" { + var mal: MultiArrayList(struct { void }) = .empty; + + for (0..5) |_| + mal.append(testing.allocator, .{{}}) catch unreachable; + + for (0..5) |_| + try testing.expectEqual(mal.pop().?[0], {}); + + try testing.expectEqual(mal.pop(), null); +} From 209e685a58835cecac5eff9cd09402380e29b5ca Mon Sep 17 00:00:00 2001 From: youdi323323 Date: Fri, 3 Oct 2025 08:29:25 +0900 Subject: [PATCH 2/5] Ensure deinit, nullable void --- lib/std/multi_array_list.zig | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index 4470d44814e4..ff3abcc9ebfb 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -614,7 +614,10 @@ pub fn MultiArrayList(comptime T: type) type { .name = fields[i].name ++ "_ptr", .type = *fields[i].type, .default_value_ptr = null, - .is_comptime = if (fields[i].type == void) false else fields[i].is_comptime, + .is_comptime = if (fields[i].type == void) + false + else + fields[i].is_comptime, .alignment = fields[i].alignment, }; break :entry @Type(.{ .@"struct" = .{ @@ -1084,13 +1087,27 @@ test "orderedRemoveMany" { } test "value as a tuple that containing void" { - var mal: MultiArrayList(struct { void }) = .empty; + const gpa = testing.allocator; + + var list: MultiArrayList(struct { void }) = .empty; + defer list.deinit(gpa); + + list.append(gpa, .{{}}) catch unreachable; + + try testing.expectEqual(list.pop().?[0], {}); + + try testing.expectEqual(list.pop(), null); +} + +test "value as a tuple that containing nullable void" { + const gpa = testing.allocator; + + var list: MultiArrayList(struct { ?void }) = .empty; + defer list.deinit(gpa); - for (0..5) |_| - mal.append(testing.allocator, .{{}}) catch unreachable; + list.append(gpa, .{null}) catch unreachable; - for (0..5) |_| - try testing.expectEqual(mal.pop().?[0], {}); + try testing.expectEqual(list.pop().?[0], null); - try testing.expectEqual(mal.pop(), null); + try testing.expectEqual(list.pop(), null); } From 4db30b0d959151e6b2c54ce9cd981f3d768bcc2b Mon Sep 17 00:00:00 2001 From: youdi323323 Date: Fri, 3 Oct 2025 08:35:28 +0900 Subject: [PATCH 3/5] I shoulded just not mark field with comptime --- lib/std/multi_array_list.zig | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index ff3abcc9ebfb..7374fb3911e4 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -614,10 +614,7 @@ pub fn MultiArrayList(comptime T: type) type { .name = fields[i].name ++ "_ptr", .type = *fields[i].type, .default_value_ptr = null, - .is_comptime = if (fields[i].type == void) - false - else - fields[i].is_comptime, + .is_comptime = false, .alignment = fields[i].alignment, }; break :entry @Type(.{ .@"struct" = .{ @@ -1092,7 +1089,7 @@ test "value as a tuple that containing void" { var list: MultiArrayList(struct { void }) = .empty; defer list.deinit(gpa); - list.append(gpa, .{{}}) catch unreachable; + try list.append(gpa, .{{}}); try testing.expectEqual(list.pop().?[0], {}); @@ -1105,7 +1102,7 @@ test "value as a tuple that containing nullable void" { var list: MultiArrayList(struct { ?void }) = .empty; defer list.deinit(gpa); - list.append(gpa, .{null}) catch unreachable; + try list.append(gpa, .{null}); try testing.expectEqual(list.pop().?[0], null); From ebbda52125230ce03681c7600a1b9a69a00dd24b Mon Sep 17 00:00:00 2001 From: youdi323323 Date: Fri, 3 Oct 2025 08:48:34 +0900 Subject: [PATCH 4/5] Nullable test is not needed --- lib/std/multi_array_list.zig | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index 7374fb3911e4..60b61576f798 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -1095,16 +1095,3 @@ test "value as a tuple that containing void" { try testing.expectEqual(list.pop(), null); } - -test "value as a tuple that containing nullable void" { - const gpa = testing.allocator; - - var list: MultiArrayList(struct { ?void }) = .empty; - defer list.deinit(gpa); - - try list.append(gpa, .{null}); - - try testing.expectEqual(list.pop().?[0], null); - - try testing.expectEqual(list.pop(), null); -} From 95dd87449d85dd03e24658515effba8b048822f1 Mon Sep 17 00:00:00 2001 From: youdi323323 Date: Sat, 4 Oct 2025 08:45:14 +0900 Subject: [PATCH 5/5] void -> comptime field --- lib/std/multi_array_list.zig | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig index 60b61576f798..3998c341ff23 100644 --- a/lib/std/multi_array_list.zig +++ b/lib/std/multi_array_list.zig @@ -1083,13 +1083,15 @@ test "orderedRemoveMany" { try testing.expectEqualSlices(usize, &.{}, list.items(.x)); } -test "value as a tuple that containing void" { +test "value as a tuple that containing comptime field" { const gpa = testing.allocator; + // Void default to comptime void = {} + var list: MultiArrayList(struct { void }) = .empty; defer list.deinit(gpa); - try list.append(gpa, .{{}}); + try list.append(gpa, .{}); try testing.expectEqual(list.pop().?[0], {});