aboutsummaryrefslogtreecommitdiff
path: root/lib/std/multi_array_list.zig
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2021-03-11 23:05:46 +0100
committerIsaac Freund <ifreund@ifreund.xyz>2021-03-12 00:17:35 +0100
commit482424e2b12cfcfe71280c826a2d31cb5df13a1a (patch)
tree41a28f6fc82dee2ce01084e130001ed4b24e9448 /lib/std/multi_array_list.zig
parent4fc6f631e044b5ddfff6c610f04f3619a1bbeb8d (diff)
downloadzig-482424e2b12cfcfe71280c826a2d31cb5df13a1a.tar.gz
zig-482424e2b12cfcfe71280c826a2d31cb5df13a1a.zip
std: Handle empty MultiArrayList in items()
Closes #8211
Diffstat (limited to 'lib/std/multi_array_list.zig')
-rw-r--r--lib/std/multi_array_list.zig7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/std/multi_array_list.zig b/lib/std/multi_array_list.zig
index 37c4456d22..f4d89d198c 100644
--- a/lib/std/multi_array_list.zig
+++ b/lib/std/multi_array_list.zig
@@ -28,8 +28,11 @@ pub fn MultiArrayList(comptime S: type) type {
capacity: usize,
pub fn items(self: Slice, comptime field: Field) []FieldType(field) {
- const byte_ptr = self.ptrs[@enumToInt(field)];
const F = FieldType(field);
+ if (self.len == 0) {
+ return &[_]F{};
+ }
+ const byte_ptr = self.ptrs[@enumToInt(field)];
const casted_ptr = @ptrCast([*]F, @alignCast(@alignOf(F), byte_ptr));
return casted_ptr[0..self.len];
}
@@ -300,6 +303,8 @@ test "basic usage" {
var list = MultiArrayList(Foo){};
defer list.deinit(ally);
+ testing.expectEqual(@as(usize, 0), list.items(.a).len);
+
try list.ensureCapacity(ally, 2);
list.appendAssumeCapacity(.{