commit 61f5ea4c9adc96dbdabca533f77d475233089b1c (tree)
parent 20925b2f5c5c0ae20fdc0574e5d4e5740d17b4d6
Author: Veikka Tuominen <git@vexu.eu>
Date: Fri, 28 Oct 2022 15:33:32 +0300
Sema: add error note for wrong pointer dereference syntax
Closes #1897
Diffstat:
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/src/Sema.zig b/src/Sema.zig
@@ -16612,7 +16612,17 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
const bitoffset_src: LazySrcLoc = .{ .node_offset_ptr_bitoffset = extra.data.src_node };
const hostsize_src: LazySrcLoc = .{ .node_offset_ptr_hostsize = extra.data.src_node };
- const unresolved_elem_ty = try sema.resolveType(block, elem_ty_src, extra.data.elem_type);
+ const unresolved_elem_ty = blk: {
+ const air_inst = try sema.resolveInst(extra.data.elem_type);
+ const ty = sema.analyzeAsType(block, elem_ty_src, air_inst) catch |err| {
+ if (err == error.AnalysisFail and sema.err != null and sema.typeOf(air_inst).isSinglePointer()) {
+ try sema.errNote(block, elem_ty_src, sema.err.?, "use '.*' to dereference pointer", .{});
+ }
+ return err;
+ };
+ if (ty.tag() == .generic_poison) return error.GenericPoison;
+ break :blk ty;
+ };
const target = sema.mod.getTarget();
var extra_i = extra.end;
diff --git a/test/cases/compile_errors/incorrect_pointer_dereference_syntax.zig b/test/cases/compile_errors/incorrect_pointer_dereference_syntax.zig
@@ -0,0 +1,11 @@
+pub export fn entry() void {
+ var a: *u32 = undefined;
+ _ = *a;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :3:10: error: expected type 'type', found '*u32'
+// :3:10: note: use '.*' to dereference pointer