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

Closes #13698
This commit is contained in:
Veikka Tuominen
2022-11-29 18:49:27 +02:00
parent 6f5a438946
commit 4b0ef6a409
2 changed files with 14 additions and 2 deletions

View File

@@ -17613,11 +17613,11 @@ fn zirFieldType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
const inst_data = sema.code.instructions.items(.data)[inst].pl_node;
const extra = sema.code.extraData(Zir.Inst.FieldType, inst_data.payload_index).data;
const ty_src = inst_data.src();
const field_src = inst_data.src();
const field_name_src: LazySrcLoc = .{ .node_offset_field_name = inst_data.src_node };
const aggregate_ty = try sema.resolveType(block, ty_src, extra.container_type);
if (aggregate_ty.tag() == .var_args_param) return sema.addType(aggregate_ty);
const field_name = sema.code.nullTerminatedString(extra.name_start);
return sema.fieldType(block, aggregate_ty, field_name, field_src, ty_src);
return sema.fieldType(block, aggregate_ty, field_name, field_name_src, ty_src);
}
fn fieldType(

View File

@@ -12,9 +12,21 @@ export fn f() void {
_ = a;
}
const Object = struct {
field_1: u32,
field_2: u32,
};
fn dump(_: Object) void {}
pub export fn entry() void {
dump(.{ .field_1 = 123, .field_3 = 456 });
}
// error
// backend=stage2
// target=native
//
// :10:10: error: no field named 'foo' in struct 'tmp.A'
// :1:11: note: struct declared here
// :21:30: error: no field named 'field_3' in struct 'tmp.Object'
// :15:16: note: struct declared here