authorgravatar for curtistatewilkinson@gmail.comCurtis Tate Wilkinson <curtistatewilkinson@gmail.com> 2023-11-18 22:03:10+10:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2023-11-18 12:03:10+00:00
log7b99189f191df47c400693f324128d26804ee84d
tree0ca4d40996cddece4cbeb57238d41b61bf21ef21
parentd44f822821839739c282fe325d9800ab086b456e
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Add struct declaration location to empty root struct field member error


3 files changed, 14 insertions(+), 8 deletions(-)

src/Sema.zig+12-8
...@@ -5241,15 +5241,19 @@ fn failWithBadMemberAccess(...@@ -5241,15 +5241,19 @@ fn failWithBadMemberAccess(
5241 .Enum => "enum",5241 .Enum => "enum",
5242 else => unreachable,5242 else => unreachable,
5243 };5243 };
5244 if (agg_ty.getOwnerDeclOrNull(mod)) |some| if (mod.declIsRoot(some)) {
5245 return sema.fail(block, field_src, "root struct of file '{}' has no member named '{}'", .{
5246 agg_ty.fmt(mod), field_name.fmt(&mod.intern_pool),
5247 });
5248 };
5249 const msg = msg: {5244 const msg = msg: {
5250 const msg = try sema.errMsg(block, field_src, "{s} '{}' has no member named '{}'", .{5245 const msg = blk: {
5251 kw_name, agg_ty.fmt(mod), field_name.fmt(&mod.intern_pool),5246 if (agg_ty.getOwnerDeclOrNull(mod)) |some| if (mod.declIsRoot(some)) {
5252 });5247 break :blk try sema.errMsg(block, field_src, "root struct of file '{}' has no member named '{}'", .{
5248 agg_ty.fmt(mod), field_name.fmt(&mod.intern_pool),
5249 });
5250 };
5251
5252 break :blk try sema.errMsg(block, field_src, "{s} '{}' has no member named '{}'", .{
5253 kw_name, agg_ty.fmt(mod), field_name.fmt(&mod.intern_pool),
5254 });
5255 };
5256
5253 errdefer msg.destroy(sema.gpa);5257 errdefer msg.destroy(sema.gpa);
5254 try sema.addDeclaredHereNote(msg, agg_ty);5258 try sema.addDeclaredHereNote(msg, agg_ty);
5255 break :msg msg;5259 break :msg msg;
test/cases/compile_errors/bogus_compile_var.zig+1
...@@ -8,3 +8,4 @@ export fn entry() usize {...@@ -8,3 +8,4 @@ export fn entry() usize {
8// target=native8// target=native
9//9//
10// :1:29: error: root struct of file 'builtin' has no member named 'bogus'10// :1:29: error: root struct of file 'builtin' has no member named 'bogus'
11// note: struct declared here
test/cases/compile_errors/missing_main_fn_in_executable.zig+1
...@@ -4,6 +4,7 @@...@@ -4,6 +4,7 @@
4// output_mode=Exe4// output_mode=Exe
5//5//
6// : error: root struct of file 'tmp' has no member named 'main'6// : error: root struct of file 'tmp' has no member named 'main'
7// : note: struct declared here
7// : note: called from here8// : note: called from here
8// : note: called from here9// : note: called from here
9// : note: called from here10// : note: called from here