motiejus/zig

fork of https://codeberg.org/ziglang/zig
git clone https://git.jakstys.lt/motiejus/zig.git
Log | Tree | Refs | README | LICENSE

commit 7b99189f191df47c400693f324128d26804ee84d (tree)
parent d44f822821839739c282fe325d9800ab086b456e
Author: Curtis Tate Wilkinson <curtistatewilkinson@gmail.com>
Date:   Sat, 18 Nov 2023 22:03:10 +1000

Add struct declaration location to empty root struct field member error


Diffstat:
Msrc/Sema.zig | 20++++++++++++--------
Mtest/cases/compile_errors/bogus_compile_var.zig | 1+
Mtest/cases/compile_errors/missing_main_fn_in_executable.zig | 1+
3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -5241,15 +5241,19 @@ fn failWithBadMemberAccess( .Enum => "enum", else => unreachable, }; - if (agg_ty.getOwnerDeclOrNull(mod)) |some| if (mod.declIsRoot(some)) { - return sema.fail(block, field_src, "root struct of file '{}' has no member named '{}'", .{ - agg_ty.fmt(mod), field_name.fmt(&mod.intern_pool), - }); - }; const msg = msg: { - const msg = try sema.errMsg(block, field_src, "{s} '{}' has no member named '{}'", .{ - kw_name, agg_ty.fmt(mod), field_name.fmt(&mod.intern_pool), - }); + const msg = blk: { + if (agg_ty.getOwnerDeclOrNull(mod)) |some| if (mod.declIsRoot(some)) { + break :blk try sema.errMsg(block, field_src, "root struct of file '{}' has no member named '{}'", .{ + agg_ty.fmt(mod), field_name.fmt(&mod.intern_pool), + }); + }; + + break :blk try sema.errMsg(block, field_src, "{s} '{}' has no member named '{}'", .{ + kw_name, agg_ty.fmt(mod), field_name.fmt(&mod.intern_pool), + }); + }; + errdefer msg.destroy(sema.gpa); try sema.addDeclaredHereNote(msg, agg_ty); break :msg msg; diff --git a/test/cases/compile_errors/bogus_compile_var.zig b/test/cases/compile_errors/bogus_compile_var.zig @@ -8,3 +8,4 @@ export fn entry() usize { // target=native // // :1:29: error: root struct of file 'builtin' has no member named 'bogus' +// note: struct declared here diff --git a/test/cases/compile_errors/missing_main_fn_in_executable.zig b/test/cases/compile_errors/missing_main_fn_in_executable.zig @@ -4,6 +4,7 @@ // output_mode=Exe // // : error: root struct of file 'tmp' has no member named 'main' +// : note: struct declared here // : note: called from here // : note: called from here // : note: called from here