authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-09-29 17:45:27+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-09-30 00:09:24+03:00
logb3c6d774d292e6e4ddf4cd54455c4ef3c6386d66
tree782ba20f4fa00b095b1aec1db866833947b53882
parent409cf4aeb826d8f7c35f0aa10bb0a8fe45188555

stage2: improve error message for missing member in file root struct

* the root struct decl name is fully qualified this prevents error messages containing 'main.main' * avoid declared here note when file struct is missing a member It always points at the start of the file which might contain another container misleading the user.

8 files changed, 12 insertions(+), 11 deletions(-)

src/Module.zig+1
......@@ -4435,6 +4435,7 @@ pub fn semaFile(mod: *Module, file: *File) SemaError!void {
44354435 new_decl.alive = true; // This Decl corresponds to a File and is therefore always alive.
44364436 new_decl.analysis = .in_progress;
44374437 new_decl.generation = mod.generation;
4438 new_decl.name_fully_qualified = true;
44384439
44394440 if (file.status == .success_zir) {
44404441 assert(file.zir_loaded);
src/Sema.zig+5
......@@ -4353,6 +4353,11 @@ fn failWithBadMemberAccess(
43534353 .Enum => "enum",
43544354 else => unreachable,
43554355 };
4356 if (sema.mod.declIsRoot(agg_ty.getOwnerDecl())) {
4357 return sema.fail(block, field_src, "root struct of file '{}' has no member named '{s}'", .{
4358 agg_ty.fmt(sema.mod), field_name,
4359 });
4360 }
43564361 const msg = msg: {
43574362 const msg = try sema.errMsg(block, field_src, "{s} '{}' has no member named '{s}'", .{
43584363 kw_name, agg_ty.fmt(sema.mod), field_name,
test/cases/aarch64-macos/hello_world_with_updates.0.zig+1-2
......@@ -2,5 +2,4 @@
22// output_mode=Exe
33// target=aarch64-macos
44//
5// :109:9: error: struct 'tmp.tmp' has no member named 'main'
6// :7:1: note: struct declared here
5// :109:9: error: root struct of file 'tmp' has no member named 'main'
test/cases/compile_errors/bogus_compile_var.zig+1-2
......@@ -5,5 +5,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(x)); }
55// backend=stage2
66// target=native
77//
8// :1:29: error: struct 'builtin.builtin' has no member named 'bogus'
9// :1:1: note: struct declared here
8// :1:29: error: root struct of file 'builtin' has no member named 'bogus'
test/cases/compile_errors/issue_2032_compile_diagnostic_string_for_top_level_decl_type.zig+1-1
......@@ -7,5 +7,5 @@ export fn entry() void {
77// backend=stage2
88// target=native
99//
10// :2:27: error: expected type 'u32', found 'tmp.tmp'
10// :2:27: error: expected type 'u32', found 'tmp'
1111// :1:1: note: struct declared here
test/cases/x86_64-linux/hello_world_with_updates.0.zig+1-2
......@@ -2,5 +2,4 @@
22// output_mode=Exe
33// target=x86_64-linux
44//
5// :109:9: error: struct 'tmp.tmp' has no member named 'main'
6// :7:1: note: struct declared here
5// :109:9: error: root struct of file 'tmp' has no member named 'main'
test/cases/x86_64-macos/hello_world_with_updates.0.zig+1-2
......@@ -2,5 +2,4 @@
22// output_mode=Exe
33// target=x86_64-macos
44//
5// :109:9: error: struct 'tmp.tmp' has no member named 'main'
6// :7:1: note: struct declared here
5// :109:9: error: root struct of file 'tmp' has no member named 'main'
test/cases/x86_64-windows/hello_world_with_updates.0.zig+1-2
......@@ -2,5 +2,4 @@
22// output_mode=Exe
33// target=x86_64-windows
44//
5// :130:9: error: struct 'tmp.tmp' has no member named 'main'
6// :7:1: note: struct declared here
5// :130:9: error: root struct of file 'tmp' has no member named 'main'