From 30b1ec85dd5d11a7dd767275ae3e65f17035d2f3 Mon Sep 17 00:00:00 2001 From: Ryan Liptak Date: Tue, 20 Oct 2026 01:27:43 -0700 Subject: [PATCH] Sema: include sentinel in dest elems when coercing tuple to array --- src/Sema.zig | 3 ++- test/behavior/array.zig | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Sema.zig b/src/Sema.zig index 733703bffe2328f314bd176de8bcbec8ba3e38cf..a83f9ec67af8088d413abdce43e246b2ccb0deff 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -30670,6 +30670,7 @@ fn coerceTupleToArray( const inst_ty = sema.typeOf(inst); const inst_len = inst_ty.arrayLen(zcu); const dest_len = dest_ty.arrayLen(zcu); + const dest_len_including_sent = dest_ty.arrayLenIncludingSentinel(zcu); if (dest_len != inst_len) { const msg = msg: { @@ -30682,7 +30683,7 @@ fn coerceTupleToArray( return sema.failWithOwnedErrorMsg(block, msg); } - const dest_elems = try sema.usizeCast(block, dest_ty_src, dest_len); + const dest_elems = try sema.usizeCast(block, dest_ty_src, dest_len_including_sent); const element_vals = try sema.arena.alloc(InternPool.Index, dest_elems); const element_refs = try sema.arena.alloc(Air.Inst.Ref, dest_elems); const dest_elem_ty = dest_ty.childType(zcu); diff --git a/test/behavior/array.zig b/test/behavior/array.zig index 10cbdd6f731658795f030c4167c6d204079767bc..574d0f2a007134d1bccc5bce2a300da0abd43fc7 100644 --- a/test/behavior/array.zig +++ b/test/behavior/array.zig @@ -591,6 +591,9 @@ test "tuple to array handles sentinel" { var b: [3:0]u8 = a; }; try expect(S.b[0] == 1); + try expect(S.b[1] == 2); + try expect(S.b[2] == 3); + try expect(S.b[3] == 0); } test "array init of container level array variable" { -- 2.54.0