From e7bf143b364f004a76e86cad5fd3256fa87761e4 Mon Sep 17 00:00:00 2001 From: kcbanner Date: Sun, 24 Sep 2023 18:38:14 -0400 Subject: type: handle the 0-length array case in abiSizeAdvanced This fixes a panic in `unionAbiSize` when a 0-length array of a union is used as a struct field. Because `resolveTypeLayout` does not resolve the `elem_ty` if `arrayLenIncludingSentinel` returns 0 for the array, the child union type is not guaranteed to have a resolved layout at this point. Fixed this case by just returning 0 here. --- src/type.zig | 1 + 1 file changed, 1 insertion(+) (limited to 'src/type.zig') diff --git a/src/type.zig b/src/type.zig index ee0b19d099..88a3a7cc43 100644 --- a/src/type.zig +++ b/src/type.zig @@ -1244,6 +1244,7 @@ pub const Type = struct { .array_type => |array_type| { const len = array_type.len + @intFromBool(array_type.sentinel != .none); + if (len == 0) return .{ .scalar = 0 }; switch (try array_type.child.toType().abiSizeAdvanced(mod, strat)) { .scalar => |elem_size| return .{ .scalar = len * elem_size }, .val => switch (strat) { -- cgit v1.2.3