authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-10-28 15:33:32+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-10-29 14:55:43+03:00
log61f5ea4c9adc96dbdabca533f77d475233089b1c
tree6544c39cbd020b9ee28c790734dfd3bd13e00a97
parent20925b2f5c5c0ae20fdc0574e5d4e5740d17b4d6

Sema: add error note for wrong pointer dereference syntax

Closes #1897

2 files changed, 22 insertions(+), 1 deletions(-)

src/Sema.zig+11-1
......@@ -16612,7 +16612,17 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1661216612 const bitoffset_src: LazySrcLoc = .{ .node_offset_ptr_bitoffset = extra.data.src_node };
1661316613 const hostsize_src: LazySrcLoc = .{ .node_offset_ptr_hostsize = extra.data.src_node };
1661416614
16615 const unresolved_elem_ty = try sema.resolveType(block, elem_ty_src, extra.data.elem_type);
16615 const unresolved_elem_ty = blk: {
16616 const air_inst = try sema.resolveInst(extra.data.elem_type);
16617 const ty = sema.analyzeAsType(block, elem_ty_src, air_inst) catch |err| {
16618 if (err == error.AnalysisFail and sema.err != null and sema.typeOf(air_inst).isSinglePointer()) {
16619 try sema.errNote(block, elem_ty_src, sema.err.?, "use '.*' to dereference pointer", .{});
16620 }
16621 return err;
16622 };
16623 if (ty.tag() == .generic_poison) return error.GenericPoison;
16624 break :blk ty;
16625 };
1661616626 const target = sema.mod.getTarget();
1661716627
1661816628 var extra_i = extra.end;
test/cases/compile_errors/incorrect_pointer_dereference_syntax.zig created+11
......@@ -0,0 +1,11 @@
1pub export fn entry() void {
2 var a: *u32 = undefined;
3 _ = *a;
4}
5
6// error
7// backend=stage2
8// target=native
9//
10// :3:10: error: expected type 'type', found '*u32'
11// :3:10: note: use '.*' to dereference pointer