Commit 7b99189f19

Curtis Tate Wilkinson <curtistatewilkinson@gmail.com>
2023-11-18 13:03:10
Add struct declaration location to empty root struct field member error
1 parent d44f822
Changed files (3)
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;
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
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