authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-11-10 23:47:04-05:00
committergravatar for mlugg@mlugg.co.ukMatthew Lugg <mlugg@mlugg.co.uk> 2023-11-11 13:11:51+00:00
log3fc6a2f11399e84b9cfa4cfef65ef40aa6de173b
treea92348ff78c2e73f9411498dd4f063a1478995aa
parent63e5476450bfcec4aa8417e9ea5a3006b2a688a0

sema: pass sema through if available for the array_type case in bitSizeAdvanced


2 files changed, 12 insertions(+), 1 deletions(-)

src/type.zig+4-1
......@@ -1519,7 +1519,10 @@ pub const Type = struct {
15191519 const len = array_type.len + @intFromBool(array_type.sentinel != .none);
15201520 if (len == 0) return 0;
15211521 const elem_ty = array_type.child.toType();
1522 const elem_size = @max(elem_ty.abiAlignment(mod).toByteUnits(0), elem_ty.abiSize(mod));
1522 const elem_size = @max(
1523 (try elem_ty.abiAlignmentAdvanced(mod, strat)).scalar.toByteUnits(0),
1524 (try elem_ty.abiSizeAdvanced(mod, strat)).scalar,
1525 );
15231526 if (elem_size == 0) return 0;
15241527 const elem_bit_size = try bitSizeAdvanced(elem_ty, mod, opt_sema);
15251528 return (len - 1) * 8 * elem_size + elem_bit_size;
test/behavior/sizeof_and_typeof.zig+8
......@@ -300,3 +300,11 @@ test "@offsetOf zero-bit field" {
300300 };
301301 try expect(@offsetOf(S, "b") == @offsetOf(S, "c"));
302302}
303
304test "@bitSizeOf on array of structs" {
305 const S = struct {
306 foo: u64,
307 };
308
309 try expectEqual(128, @bitSizeOf([2]S));
310}