authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-04 14:51:32-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-09-20 18:33:00-07:00
log3bd62e1bb62f4f490aeaa68c3cbf9c6c09c40726
tree6d86cbef38241714677bfe50848378657af63d0a
parentd00aee021befe7555a30854e777358eb98ce549a

Sema: fix source location of "declared here" note

point at the var not at the init expression

6 files changed, 36 insertions(+), 34 deletions(-)

src/Sema.zig+13-13
......@@ -3756,9 +3756,9 @@ fn zirAllocExtended(
37563756 const pt = sema.pt;
37573757 const gpa = sema.gpa;
37583758 const extra = sema.code.extraData(Zir.Inst.AllocExtended, extended.operand);
3759 const var_src = block.nodeOffset(extra.data.src_node);
37593760 const ty_src = block.src(.{ .node_offset_var_decl_ty = extra.data.src_node });
37603761 const align_src = block.src(.{ .node_offset_var_decl_align = extra.data.src_node });
3761 const init_src = block.src(.{ .node_offset_var_decl_init = extra.data.src_node });
37623762 const small: Zir.Inst.AllocExtended.Small = @bitCast(extended.small);
37633763
37643764 var extra_index: usize = extra.end;
......@@ -3777,7 +3777,7 @@ fn zirAllocExtended(
37773777
37783778 if (block.isComptime() or small.is_comptime) {
37793779 if (small.has_type) {
3780 return sema.analyzeComptimeAlloc(block, init_src, var_ty, alignment);
3780 return sema.analyzeComptimeAlloc(block, var_src, var_ty, alignment);
37813781 } else {
37823782 try sema.air_instructions.append(gpa, .{
37833783 .tag = .inferred_alloc_comptime,
......@@ -3792,7 +3792,7 @@ fn zirAllocExtended(
37923792 }
37933793
37943794 if (small.has_type and try var_ty.comptimeOnlySema(pt)) {
3795 return sema.analyzeComptimeAlloc(block, init_src, var_ty, alignment);
3795 return sema.analyzeComptimeAlloc(block, var_src, var_ty, alignment);
37963796 }
37973797
37983798 if (small.has_type) {
......@@ -3802,8 +3802,8 @@ fn zirAllocExtended(
38023802 const target = pt.zcu.getTarget();
38033803 try var_ty.resolveLayout(pt);
38043804 if (sema.func_is_naked and try var_ty.hasRuntimeBitsSema(pt)) {
3805 const var_src = block.src(.{ .node_offset_store_ptr = extra.data.src_node });
3806 return sema.fail(block, var_src, "local variable in naked function", .{});
3805 const store_src = block.src(.{ .node_offset_store_ptr = extra.data.src_node });
3806 return sema.fail(block, store_src, "local variable in naked function", .{});
38073807 }
38083808 const ptr_type = try sema.pt.ptrTypeSema(.{
38093809 .child = var_ty.toIntern(),
......@@ -3842,9 +3842,9 @@ fn zirAllocComptime(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr
38423842
38433843 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
38443844 const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
3845 const init_src = block.src(.{ .node_offset_var_decl_init = inst_data.src_node });
3845 const var_src = block.nodeOffset(inst_data.src_node);
38463846 const var_ty = try sema.resolveType(block, ty_src, inst_data.operand);
3847 return sema.analyzeComptimeAlloc(block, init_src, var_ty, .none);
3847 return sema.analyzeComptimeAlloc(block, var_src, var_ty, .none);
38483848}
38493849
38503850fn zirMakePtrConst(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
......@@ -4254,11 +4254,11 @@ fn zirAlloc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.I
42544254
42554255 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
42564256 const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
4257 const init_src = block.src(.{ .node_offset_var_decl_init = inst_data.src_node });
4257 const var_src = block.nodeOffset(inst_data.src_node);
42584258
42594259 const var_ty = try sema.resolveType(block, ty_src, inst_data.operand);
42604260 if (block.isComptime() or try var_ty.comptimeOnlySema(pt)) {
4261 return sema.analyzeComptimeAlloc(block, init_src, var_ty, .none);
4261 return sema.analyzeComptimeAlloc(block, var_src, var_ty, .none);
42624262 }
42634263 if (sema.func_is_naked and try var_ty.hasRuntimeBitsSema(pt)) {
42644264 const mut_src = block.src(.{ .node_offset_store_ptr = inst_data.src_node });
......@@ -4284,14 +4284,14 @@ fn zirAllocMut(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
42844284
42854285 const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
42864286 const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
4287 const init_src = block.src(.{ .node_offset_var_decl_init = inst_data.src_node });
4287 const var_src = block.nodeOffset(inst_data.src_node);
42884288 const var_ty = try sema.resolveType(block, ty_src, inst_data.operand);
42894289 if (block.isComptime()) {
4290 return sema.analyzeComptimeAlloc(block, init_src, var_ty, .none);
4290 return sema.analyzeComptimeAlloc(block, var_src, var_ty, .none);
42914291 }
42924292 if (sema.func_is_naked and try var_ty.hasRuntimeBitsSema(pt)) {
4293 const var_src = block.src(.{ .node_offset_store_ptr = inst_data.src_node });
4294 return sema.fail(block, var_src, "local variable in naked function", .{});
4293 const store_src = block.src(.{ .node_offset_store_ptr = inst_data.src_node });
4294 return sema.fail(block, store_src, "local variable in naked function", .{});
42954295 }
42964296 try sema.validateVarType(block, ty_src, var_ty, false);
42974297 const target = pt.zcu.getTarget();
test/cases/compile_errors/comptime_var_referenced_at_runtime.zig+10-10
......@@ -75,31 +75,31 @@ export fn bax() void {
7575//
7676// :5:19: error: runtime value contains reference to comptime var
7777// :5:19: note: comptime var pointers are not available at runtime
78// :4:27: note: 'runtime_value' points to comptime var declared here
78// :4:14: note: 'runtime_value' points to comptime var declared here
7979// :12:40: error: runtime value contains reference to comptime var
8080// :12:40: note: comptime var pointers are not available at runtime
81// :11:27: note: 'runtime_value' points to comptime var declared here
81// :11:14: note: 'runtime_value' points to comptime var declared here
8282// :19:50: error: runtime value contains reference to comptime var
8383// :19:50: note: comptime var pointers are not available at runtime
84// :18:27: note: 'runtime_value' points to comptime var declared here
84// :18:14: note: 'runtime_value' points to comptime var declared here
8585// :28:9: error: runtime value contains reference to comptime var
8686// :28:9: note: comptime var pointers are not available at runtime
87// :27:27: note: 'runtime_value' points to comptime var declared here
87// :27:14: note: 'runtime_value' points to comptime var declared here
8888// :36:9: error: runtime value contains reference to comptime var
8989// :36:9: note: comptime var pointers are not available at runtime
90// :35:27: note: 'runtime_value' points to comptime var declared here
90// :35:14: note: 'runtime_value' points to comptime var declared here
9191// :41:12: error: runtime value contains reference to comptime var
9292// :41:12: note: comptime var pointers are not available at runtime
93// :40:27: note: 'runtime_value' points to comptime var declared here
93// :40:14: note: 'runtime_value' points to comptime var declared here
9494// :46:39: error: runtime value contains reference to comptime var
9595// :46:39: note: comptime var pointers are not available at runtime
96// :45:27: note: 'runtime_value' points to comptime var declared here
96// :45:14: note: 'runtime_value' points to comptime var declared here
9797// :55:18: error: runtime value contains reference to comptime var
9898// :55:18: note: comptime var pointers are not available at runtime
99// :51:30: note: 'runtime_value' points to comptime var declared here
99// :51:14: note: 'runtime_value' points to comptime var declared here
100100// :63:18: error: runtime value contains reference to comptime var
101101// :63:18: note: comptime var pointers are not available at runtime
102// :59:27: note: 'runtime_value' points to comptime var declared here
102// :59:14: note: 'runtime_value' points to comptime var declared here
103103// :71:19: error: runtime value contains reference to comptime var
104104// :71:19: note: comptime var pointers are not available at runtime
105// :67:30: note: 'runtime_value' points to comptime var declared here
105// :67:14: note: 'runtime_value' points to comptime var declared here
test/cases/compile_errors/comptime_var_referenced_by_decl.zig+8-8
......@@ -47,19 +47,19 @@ export var h: *[1]u32 = h: {
4747// error
4848//
4949// :1:27: error: global variable contains reference to comptime var
50// :2:18: note: 'a' points to comptime var declared here
50// :2:5: note: 'a' points to comptime var declared here
5151// :6:30: error: global variable contains reference to comptime var
52// :7:18: note: 'b[0]' points to comptime var declared here
52// :7:5: note: 'b[0]' points to comptime var declared here
5353// :11:30: error: global variable contains reference to comptime var
54// :12:18: note: 'c' points to comptime var declared here
54// :12:5: note: 'c' points to comptime var declared here
5555// :16:33: error: global variable contains reference to comptime var
56// :17:18: note: 'd' points to comptime var declared here
56// :17:5: note: 'd' points to comptime var declared here
5757// :22:24: error: global variable contains reference to comptime var
58// :23:18: note: 'e.ptr' points to comptime var declared here
58// :23:5: note: 'e.ptr' points to comptime var declared here
5959// :28:33: error: global variable contains reference to comptime var
60// :29:18: note: 'f' points to comptime var declared here
60// :29:5: note: 'f' points to comptime var declared here
6161// :34:40: error: global variable contains reference to comptime var
6262// :34:40: note: 'g' points to 'v0[0]', where
63// :36:24: note: 'v0[1]' points to comptime var declared here
63// :36:5: note: 'v0[1]' points to comptime var declared here
6464// :42:28: error: global variable contains reference to comptime var
65// :43:22: note: 'h' points to comptime var declared here
65// :43:5: note: 'h' points to comptime var declared here
test/cases/compile_errors/comptime_var_referenced_by_type.zig+2-1
......@@ -21,5 +21,6 @@ comptime {
2121// error
2222//
2323// :7:16: error: captured value contains reference to comptime var
24// :16:30: note: 'wrapper.ptr' points to comptime var declared here
24// :7:16: note: 'wrapper' points to '@as(*const tmp.Wrapper, @ptrCast(&v0)).*', where
25// :16:5: note: 'v0.ptr' points to comptime var declared here
2526// :17:29: note: called at comptime here
test/cases/compile_errors/enum_field_value_references_enum.zig+2-1
......@@ -10,4 +10,5 @@ const D = 1;
1010
1111// error
1212//
13// :1:5: error: dependency loop detected
13// :2:13: error: enum 'tmp.Foo' has no member named 'B'
14// :1:17: note: enum declared here
test/cases/compile_errors/for_comptime_array_pointer.zig+1-1
......@@ -9,4 +9,4 @@ export fn foo() void {
99//
1010// :3:10: error: runtime value contains reference to comptime var
1111// :3:10: note: comptime var pointers are not available at runtime
12// :2:34: note: 'runtime_value' points to comptime var declared here
12// :2:14: note: 'runtime_value' points to comptime var declared here