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" {