Sema: tuples have no names to be used for reporting errors in finishStructInit

This commit is contained in:
Krzysztof Wolicki 2024-01-26 14:22:15 +01:00 committed by GitHub
parent bea958df4d
commit 61ba225709
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 6 deletions

View File

@ -19963,13 +19963,22 @@ fn finishStructInit(
const field_init = struct_type.fieldInit(ip, i);
if (field_init == .none) {
const field_name = struct_type.field_names.get(ip)[i];
const template = "missing struct field: {}";
const args = .{field_name.fmt(ip)};
if (root_msg) |msg| {
try sema.errNote(block, init_src, msg, template, args);
if (!struct_type.isTuple(ip)) {
const field_name = struct_type.field_names.get(ip)[i];
const template = "missing struct field: {}";
const args = .{field_name.fmt(ip)};
if (root_msg) |msg| {
try sema.errNote(block, init_src, msg, template, args);
} else {
root_msg = try sema.errMsg(block, init_src, template, args);
}
} else {
root_msg = try sema.errMsg(block, init_src, template, args);
const template = "missing tuple field with index {d}";
if (root_msg) |msg| {
try sema.errNote(block, init_src, msg, template, .{i});
} else {
root_msg = try sema.errMsg(block, init_src, template, .{i});
}
}
} else {
field_inits[i] = Air.internedToRef(field_init);

View File

@ -13,9 +13,23 @@ export fn f() void {
_ = a;
}
const B = struct { u32, u32 };
export fn g() void {
const b = B{0};
_ = b;
}
export fn h() void {
const c = B{};
_ = c;
}
// error
// backend=stage2
// target=native
//
// :9:16: error: missing struct field: x
// :1:11: note: struct 'tmp.A' declared here
// :18:16: error: missing tuple field with index 1
// :16:11: note: struct declared here
// :22:16: error: missing tuple field with index 0
// :22:16: note: missing tuple field with index 1
// :16:11: note: struct 'tmp.B' declared here