authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-11-29 18:49:27+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-11-29 21:44:08+02:00
log4b0ef6a409a11946a999e277ed2a3f4b6120d0f5
treedba2df83d5dbcbfd8bd842493f74ff3e9135e03d
parent6f5a438946dce2b201acf5b7bbe42977bc990cc4

Sema: make non-existent field error point to field name

Closes #13698

2 files changed, 14 insertions(+), 2 deletions(-)

src/Sema.zig+2-2
......@@ -17613,11 +17613,11 @@ fn zirFieldType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
1761317613 const inst_data = sema.code.instructions.items(.data)[inst].pl_node;
1761417614 const extra = sema.code.extraData(Zir.Inst.FieldType, inst_data.payload_index).data;
1761517615 const ty_src = inst_data.src();
17616 const field_src = inst_data.src();
17616 const field_name_src: LazySrcLoc = .{ .node_offset_field_name = inst_data.src_node };
1761717617 const aggregate_ty = try sema.resolveType(block, ty_src, extra.container_type);
1761817618 if (aggregate_ty.tag() == .var_args_param) return sema.addType(aggregate_ty);
1761917619 const field_name = sema.code.nullTerminatedString(extra.name_start);
17620 return sema.fieldType(block, aggregate_ty, field_name, field_src, ty_src);
17620 return sema.fieldType(block, aggregate_ty, field_name, field_name_src, ty_src);
1762117621}
1762217622
1762317623fn fieldType(
test/cases/compile_errors/invalid_field_in_struct_value_expression.zig+12
......@@ -12,9 +12,21 @@ export fn f() void {
1212 _ = a;
1313}
1414
15const Object = struct {
16 field_1: u32,
17 field_2: u32,
18};
19fn dump(_: Object) void {}
20pub export fn entry() void {
21 dump(.{ .field_1 = 123, .field_3 = 456 });
22}
23
24
1525// error
1626// backend=stage2
1727// target=native
1828//
1929// :10:10: error: no field named 'foo' in struct 'tmp.A'
2030// :1:11: note: struct declared here
31// :21:30: error: no field named 'field_3' in struct 'tmp.Object'
32// :15:16: note: struct declared here