diff --git a/src/ir.cpp b/src/ir.cpp index 5c8d8157d..78d5ae2ff 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -29079,6 +29079,12 @@ static IrInstGen *ir_analyze_instruction_ptr_type(IrAnalyze *ira, IrInstSrcPtrTy lazy_ptr_type->base.id = LazyValueIdPtrType; if (instruction->sentinel != nullptr) { + if (instruction->ptr_len != PtrLenUnknown) { + ir_add_error(ira, &instruction->base.base, + buf_sprintf("sentinels are only allowed on unknown-length pointers")); + return ira->codegen->invalid_inst_gen; + } + lazy_ptr_type->sentinel = instruction->sentinel->child; if (ir_resolve_const(ira, lazy_ptr_type->sentinel, LazyOk) == nullptr) return ira->codegen->invalid_inst_gen; diff --git a/test/compile_errors.zig b/test/compile_errors.zig index d6d3d331e..876827cf3 100644 --- a/test/compile_errors.zig +++ b/test/compile_errors.zig @@ -2,6 +2,14 @@ const tests = @import("tests.zig"); const std = @import("std"); pub fn addCases(cases: *tests.CompileErrorContext) void { + cases.add("invalid pointer syntax", + \\export fn foo() void { + \\ var guid: *:0 const u8 = undefined; + \\} + , &[_][]const u8{ + "tmp.zig:2:15: error: sentinels are only allowed on unknown-length pointers", + }); + cases.add("declaration between fields", \\const S = struct { \\ const foo = 2;