diff --git a/src/Sema.zig b/src/Sema.zig index 7b8999a211..97e90da92e 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -34603,14 +34603,14 @@ fn resolvePeerTypesInner( } // Clear existing sentinel ptr_info.sentinel = .none; - switch (ip.indexToKey(ptr_info.child)) { + if (ptr_info.flags.size == .one) switch (ip.indexToKey(ptr_info.child)) { .array_type => |array_type| ptr_info.child = (try pt.arrayType(.{ .len = array_type.len, .child = array_type.child, .sentinel = .none, })).toIntern(), else => {}, - } + }; } opt_ptr_info = ptr_info; diff --git a/test/behavior/cast.zig b/test/behavior/cast.zig index 8c2be13923..a90519379e 100644 --- a/test/behavior/cast.zig +++ b/test/behavior/cast.zig @@ -2649,3 +2649,19 @@ test "bitcast vector" { const bigsum: u32x8 = @bitCast(zerox32); try std.testing.expectEqual(0, @reduce(.Add, bigsum)); } + +test "peer type resolution: slice of sentinel-terminated array" { + var f: bool = undefined; + f = false; + + const a: [][2:0]u8 = &.{}; + const b: []const [2:0]u8 = &.{.{ 10, 20 }}; + + const result = if (f) a else b; + + comptime assert(@TypeOf(result) == []const [2:0]u8); + try expect(result.len == 1); + try expect(result[0].len == 2); + try expect(result[0][0] == 10); + try expect(result[0][1] == 20); +}