Commit 3bd62e1bb6

Andrew Kelley <andrew@ziglang.org>
2025-09-04 23:51:32
Sema: fix source location of "declared here" note
point at the var not at the init expression
1 parent d00aee0
src/Sema.zig
@@ -3756,9 +3756,9 @@ fn zirAllocExtended(
     const pt = sema.pt;
     const gpa = sema.gpa;
     const extra = sema.code.extraData(Zir.Inst.AllocExtended, extended.operand);
+    const var_src = block.nodeOffset(extra.data.src_node);
     const ty_src = block.src(.{ .node_offset_var_decl_ty = extra.data.src_node });
     const align_src = block.src(.{ .node_offset_var_decl_align = extra.data.src_node });
-    const init_src = block.src(.{ .node_offset_var_decl_init = extra.data.src_node });
     const small: Zir.Inst.AllocExtended.Small = @bitCast(extended.small);
 
     var extra_index: usize = extra.end;
@@ -3777,7 +3777,7 @@ fn zirAllocExtended(
 
     if (block.isComptime() or small.is_comptime) {
         if (small.has_type) {
-            return sema.analyzeComptimeAlloc(block, init_src, var_ty, alignment);
+            return sema.analyzeComptimeAlloc(block, var_src, var_ty, alignment);
         } else {
             try sema.air_instructions.append(gpa, .{
                 .tag = .inferred_alloc_comptime,
@@ -3792,7 +3792,7 @@ fn zirAllocExtended(
     }
 
     if (small.has_type and try var_ty.comptimeOnlySema(pt)) {
-        return sema.analyzeComptimeAlloc(block, init_src, var_ty, alignment);
+        return sema.analyzeComptimeAlloc(block, var_src, var_ty, alignment);
     }
 
     if (small.has_type) {
@@ -3802,8 +3802,8 @@ fn zirAllocExtended(
         const target = pt.zcu.getTarget();
         try var_ty.resolveLayout(pt);
         if (sema.func_is_naked and try var_ty.hasRuntimeBitsSema(pt)) {
-            const var_src = block.src(.{ .node_offset_store_ptr = extra.data.src_node });
-            return sema.fail(block, var_src, "local variable in naked function", .{});
+            const store_src = block.src(.{ .node_offset_store_ptr = extra.data.src_node });
+            return sema.fail(block, store_src, "local variable in naked function", .{});
         }
         const ptr_type = try sema.pt.ptrTypeSema(.{
             .child = var_ty.toIntern(),
@@ -3842,9 +3842,9 @@ fn zirAllocComptime(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileErr
 
     const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
     const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
-    const init_src = block.src(.{ .node_offset_var_decl_init = inst_data.src_node });
+    const var_src = block.nodeOffset(inst_data.src_node);
     const var_ty = try sema.resolveType(block, ty_src, inst_data.operand);
-    return sema.analyzeComptimeAlloc(block, init_src, var_ty, .none);
+    return sema.analyzeComptimeAlloc(block, var_src, var_ty, .none);
 }
 
 fn 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
 
     const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
     const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
-    const init_src = block.src(.{ .node_offset_var_decl_init = inst_data.src_node });
+    const var_src = block.nodeOffset(inst_data.src_node);
 
     const var_ty = try sema.resolveType(block, ty_src, inst_data.operand);
     if (block.isComptime() or try var_ty.comptimeOnlySema(pt)) {
-        return sema.analyzeComptimeAlloc(block, init_src, var_ty, .none);
+        return sema.analyzeComptimeAlloc(block, var_src, var_ty, .none);
     }
     if (sema.func_is_naked and try var_ty.hasRuntimeBitsSema(pt)) {
         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
 
     const inst_data = sema.code.instructions.items(.data)[@intFromEnum(inst)].un_node;
     const ty_src = block.src(.{ .node_offset_var_decl_ty = inst_data.src_node });
-    const init_src = block.src(.{ .node_offset_var_decl_init = inst_data.src_node });
+    const var_src = block.nodeOffset(inst_data.src_node);
     const var_ty = try sema.resolveType(block, ty_src, inst_data.operand);
     if (block.isComptime()) {
-        return sema.analyzeComptimeAlloc(block, init_src, var_ty, .none);
+        return sema.analyzeComptimeAlloc(block, var_src, var_ty, .none);
     }
     if (sema.func_is_naked and try var_ty.hasRuntimeBitsSema(pt)) {
-        const var_src = block.src(.{ .node_offset_store_ptr = inst_data.src_node });
-        return sema.fail(block, var_src, "local variable in naked function", .{});
+        const store_src = block.src(.{ .node_offset_store_ptr = inst_data.src_node });
+        return sema.fail(block, store_src, "local variable in naked function", .{});
     }
     try sema.validateVarType(block, ty_src, var_ty, false);
     const target = pt.zcu.getTarget();
test/cases/compile_errors/comptime_var_referenced_at_runtime.zig
@@ -75,31 +75,31 @@ export fn bax() void {
 //
 // :5:19: error: runtime value contains reference to comptime var
 // :5:19: note: comptime var pointers are not available at runtime
-// :4:27: note: 'runtime_value' points to comptime var declared here
+// :4:14: note: 'runtime_value' points to comptime var declared here
 // :12:40: error: runtime value contains reference to comptime var
 // :12:40: note: comptime var pointers are not available at runtime
-// :11:27: note: 'runtime_value' points to comptime var declared here
+// :11:14: note: 'runtime_value' points to comptime var declared here
 // :19:50: error: runtime value contains reference to comptime var
 // :19:50: note: comptime var pointers are not available at runtime
-// :18:27: note: 'runtime_value' points to comptime var declared here
+// :18:14: note: 'runtime_value' points to comptime var declared here
 // :28:9: error: runtime value contains reference to comptime var
 // :28:9: note: comptime var pointers are not available at runtime
-// :27:27: note: 'runtime_value' points to comptime var declared here
+// :27:14: note: 'runtime_value' points to comptime var declared here
 // :36:9: error: runtime value contains reference to comptime var
 // :36:9: note: comptime var pointers are not available at runtime
-// :35:27: note: 'runtime_value' points to comptime var declared here
+// :35:14: note: 'runtime_value' points to comptime var declared here
 // :41:12: error: runtime value contains reference to comptime var
 // :41:12: note: comptime var pointers are not available at runtime
-// :40:27: note: 'runtime_value' points to comptime var declared here
+// :40:14: note: 'runtime_value' points to comptime var declared here
 // :46:39: error: runtime value contains reference to comptime var
 // :46:39: note: comptime var pointers are not available at runtime
-// :45:27: note: 'runtime_value' points to comptime var declared here
+// :45:14: note: 'runtime_value' points to comptime var declared here
 // :55:18: error: runtime value contains reference to comptime var
 // :55:18: note: comptime var pointers are not available at runtime
-// :51:30: note: 'runtime_value' points to comptime var declared here
+// :51:14: note: 'runtime_value' points to comptime var declared here
 // :63:18: error: runtime value contains reference to comptime var
 // :63:18: note: comptime var pointers are not available at runtime
-// :59:27: note: 'runtime_value' points to comptime var declared here
+// :59:14: note: 'runtime_value' points to comptime var declared here
 // :71:19: error: runtime value contains reference to comptime var
 // :71:19: note: comptime var pointers are not available at runtime
-// :67:30: note: 'runtime_value' points to comptime var declared here
+// :67:14: note: 'runtime_value' points to comptime var declared here
test/cases/compile_errors/comptime_var_referenced_by_decl.zig
@@ -47,19 +47,19 @@ export var h: *[1]u32 = h: {
 // error
 //
 // :1:27: error: global variable contains reference to comptime var
-// :2:18: note: 'a' points to comptime var declared here
+// :2:5: note: 'a' points to comptime var declared here
 // :6:30: error: global variable contains reference to comptime var
-// :7:18: note: 'b[0]' points to comptime var declared here
+// :7:5: note: 'b[0]' points to comptime var declared here
 // :11:30: error: global variable contains reference to comptime var
-// :12:18: note: 'c' points to comptime var declared here
+// :12:5: note: 'c' points to comptime var declared here
 // :16:33: error: global variable contains reference to comptime var
-// :17:18: note: 'd' points to comptime var declared here
+// :17:5: note: 'd' points to comptime var declared here
 // :22:24: error: global variable contains reference to comptime var
-// :23:18: note: 'e.ptr' points to comptime var declared here
+// :23:5: note: 'e.ptr' points to comptime var declared here
 // :28:33: error: global variable contains reference to comptime var
-// :29:18: note: 'f' points to comptime var declared here
+// :29:5: note: 'f' points to comptime var declared here
 // :34:40: error: global variable contains reference to comptime var
 // :34:40: note: 'g' points to 'v0[0]', where
-// :36:24: note: 'v0[1]' points to comptime var declared here
+// :36:5: note: 'v0[1]' points to comptime var declared here
 // :42:28: error: global variable contains reference to comptime var
-// :43:22: note: 'h' points to comptime var declared here
+// :43:5: note: 'h' points to comptime var declared here
test/cases/compile_errors/comptime_var_referenced_by_type.zig
@@ -21,5 +21,6 @@ comptime {
 // error
 //
 // :7:16: error: captured value contains reference to comptime var
-// :16:30: note: 'wrapper.ptr' points to comptime var declared here
+// :7:16: note: 'wrapper' points to '@as(*const tmp.Wrapper, @ptrCast(&v0)).*', where
+// :16:5: note: 'v0.ptr' points to comptime var declared here
 // :17:29: note: called at comptime here
test/cases/compile_errors/enum_field_value_references_enum.zig
@@ -10,4 +10,5 @@ const D = 1;
 
 // error
 //
-// :1:5: error: dependency loop detected
+// :2:13: error: enum 'tmp.Foo' has no member named 'B'
+// :1:17: note: enum declared here
test/cases/compile_errors/for_comptime_array_pointer.zig
@@ -9,4 +9,4 @@ export fn foo() void {
 //
 // :3:10: error: runtime value contains reference to comptime var
 // :3:10: note: comptime var pointers are not available at runtime
-// :2:34: note: 'runtime_value' points to comptime var declared here
+// :2:14: note: 'runtime_value' points to comptime var declared here