diff --git a/src/analyze.cpp b/src/analyze.cpp index 89ad5aca74..28b1f0cd76 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -578,6 +578,7 @@ ZigType *get_pointer_to_type_extra2(CodeGen *g, ZigType *child_type, bool is_con } switch (ptr_len) { case PtrLenSingle: + assert(sentinel == nullptr); buf_appendf(&entry->name, "*"); break; case PtrLenUnknown: diff --git a/src/ir.cpp b/src/ir.cpp index 0352ab710a..cdb86e5b15 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -21090,7 +21090,7 @@ static ZigType *adjust_ptr_len(CodeGen *g, ZigType *ptr_type, PtrLen ptr_len) { ptr_type->data.pointer.allow_zero, ptr_type->data.pointer.vector_index, ptr_type->data.pointer.inferred_struct_field, - ptr_type->data.pointer.sentinel); + (ptr_len != PtrLenUnknown) ? nullptr : ptr_type->data.pointer.sentinel); } static ZigType *adjust_ptr_allow_zero(CodeGen *g, ZigType *ptr_type, bool allow_zero) { diff --git a/test/stage1/behavior/pointers.zig b/test/stage1/behavior/pointers.zig index fa5f2a469d..a4f619b538 100644 --- a/test/stage1/behavior/pointers.zig +++ b/test/stage1/behavior/pointers.zig @@ -1,6 +1,7 @@ const std = @import("std"); -const expect = std.testing.expect; -const expectError = std.testing.expectError; +const testing = std.testing; +const expect = testing.expect; +const expectError = testing.expectError; test "dereference pointer" { comptime testDerefPtr(); @@ -331,3 +332,8 @@ test "@ptrToInt on null optional at comptime" { comptime expect(0xf00 == @ptrToInt(pointer)); } } + +test "indexing array with sentinel returns correct type" { + var s: [:0]const u8 = "abc"; + testing.expectEqualSlices(u8, "*const u8", @typeName(@TypeOf(&s[0]))); +}