From 5b29275240a57448514fe5c5d9e8edae3b2362cc Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Thu, 21 Jul 2022 21:22:09 +0300 Subject: [PATCH] Sema: add some more 'declared here' notes --- src/Sema.zig | 39 +++++++------------ .../hello_world_with_updates.0.zig | 1 + .../compile_errors/bogus_compile_var.zig | 1 + .../bogus_method_call_on_slice.zig | 2 +- ...um_literal_to_enum_but_it_doesnt_match.zig | 2 +- ...hod_call_with_first_arg_type_primitive.zig | 3 +- ...ll_with_first_arg_type_wrong_container.zig | 3 +- .../stage2/union_extra_field.zig | 2 +- .../hello_world_with_updates.0.zig | 1 + .../hello_world_with_updates.0.zig | 1 + test/stage2/cbe.zig | 2 +- 11 files changed, 25 insertions(+), 32 deletions(-) diff --git a/src/Sema.zig b/src/Sema.zig index 1ac4658658..b2ba53c3e1 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -6814,12 +6814,7 @@ fn zirIntToEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A .{ dest_ty.fmt(sema.mod), int_val.fmtValue(sema.typeOf(operand), sema.mod) }, ); errdefer msg.destroy(sema.gpa); - try sema.mod.errNoteNonLazy( - dest_ty.declSrcLoc(sema.mod), - msg, - "enum declared here", - .{}, - ); + try sema.addDeclaredHereNote(msg, dest_ty); break :msg msg; }; return sema.failWithOwnedErrorMsg(block, msg); @@ -19432,16 +19427,7 @@ fn fieldVal( return inst; } } - // TODO add note: declared here - const kw_name = switch (child_type.zigTypeTag()) { - .Struct => "struct", - .Opaque => "opaque", - .Union => "union", - else => unreachable, - }; - return sema.fail(block, src, "{s} '{}' has no member named '{s}'", .{ - kw_name, child_type.fmt(sema.mod), field_name, - }); + return sema.failWithBadMemberAccess(block, child_type, src, field_name); }, else => { const msg = msg: { @@ -19783,7 +19769,13 @@ fn fieldCallBind( else => {}, } - return sema.fail(block, src, "type '{}' has no field or member function named '{s}'", .{ concrete_ty.fmt(sema.mod), field_name }); + const msg = msg: { + const msg = try sema.errMsg(block, src, "no field or member function named '{s}' in '{}'", .{ field_name, concrete_ty.fmt(sema.mod) }); + errdefer msg.destroy(sema.gpa); + try sema.addDeclaredHereNote(msg, concrete_ty); + break :msg msg; + }; + return sema.failWithOwnedErrorMsg(block, msg); } fn finishFieldCallBind( @@ -21176,16 +21168,11 @@ fn coerceExtra( const msg = try sema.errMsg( block, inst_src, - "enum '{}' has no field named '{s}'", - .{ dest_ty.fmt(sema.mod), bytes }, + "no field named '{s}' in enum '{}'", + .{ bytes, dest_ty.fmt(sema.mod) }, ); errdefer msg.destroy(sema.gpa); - try sema.mod.errNoteNonLazy( - dest_ty.declSrcLoc(sema.mod), - msg, - "enum declared here", - .{}, - ); + try sema.addDeclaredHereNote(msg, dest_ty); break :msg msg; }; return sema.failWithOwnedErrorMsg(block, msg); @@ -26230,7 +26217,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void { const msg = msg: { const tree = try sema.getAstTree(&block_scope); const field_src = enumFieldSrcLoc(decl, tree.*, union_obj.node_offset, field_i); - const msg = try sema.errMsg(&block_scope, field_src, "enum '{}' has no field named '{s}'", .{ union_obj.tag_ty.fmt(sema.mod), field_name }); + const msg = try sema.errMsg(&block_scope, field_src, "no field named '{s}' in enum '{}'", .{ field_name, union_obj.tag_ty.fmt(sema.mod) }); errdefer msg.destroy(sema.gpa); try sema.addDeclaredHereNote(msg, union_obj.tag_ty); break :msg msg; diff --git a/test/cases/aarch64-macos/hello_world_with_updates.0.zig b/test/cases/aarch64-macos/hello_world_with_updates.0.zig index 300baac1a4..0de742bdec 100644 --- a/test/cases/aarch64-macos/hello_world_with_updates.0.zig +++ b/test/cases/aarch64-macos/hello_world_with_updates.0.zig @@ -3,3 +3,4 @@ // target=aarch64-macos // // :107:9: error: struct 'tmp.tmp' has no member named 'main' +// :7:1: note: struct declared here diff --git a/test/cases/compile_errors/bogus_compile_var.zig b/test/cases/compile_errors/bogus_compile_var.zig index 28d8b1dba5..b675fd941c 100644 --- a/test/cases/compile_errors/bogus_compile_var.zig +++ b/test/cases/compile_errors/bogus_compile_var.zig @@ -6,3 +6,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(x)); } // target=native // // :1:29: error: struct 'builtin.builtin' has no member named 'bogus' +// :1:1: note: struct declared here diff --git a/test/cases/compile_errors/bogus_method_call_on_slice.zig b/test/cases/compile_errors/bogus_method_call_on_slice.zig index 5471871a23..b5cb5e472a 100644 --- a/test/cases/compile_errors/bogus_method_call_on_slice.zig +++ b/test/cases/compile_errors/bogus_method_call_on_slice.zig @@ -8,4 +8,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(&f)); } // backend=stage2 // target=native // -// :3:6: error: type '[]const u8' has no field or member function named 'copy' +// :3:6: error: no field or member function named 'copy' in '[]const u8' diff --git a/test/cases/compile_errors/cast_enum_literal_to_enum_but_it_doesnt_match.zig b/test/cases/compile_errors/cast_enum_literal_to_enum_but_it_doesnt_match.zig index 136bf612bf..bd89dc402a 100644 --- a/test/cases/compile_errors/cast_enum_literal_to_enum_but_it_doesnt_match.zig +++ b/test/cases/compile_errors/cast_enum_literal_to_enum_but_it_doesnt_match.zig @@ -11,5 +11,5 @@ export fn entry() void { // backend=stage2 // target=native // -// :6:21: error: enum 'tmp.Foo' has no field named 'c' +// :6:21: error: no field named 'c' in enum 'tmp.Foo' // :1:13: note: enum declared here diff --git a/test/cases/compile_errors/method_call_with_first_arg_type_primitive.zig b/test/cases/compile_errors/method_call_with_first_arg_type_primitive.zig index e93d1e717d..1cecac6fac 100644 --- a/test/cases/compile_errors/method_call_with_first_arg_type_primitive.zig +++ b/test/cases/compile_errors/method_call_with_first_arg_type_primitive.zig @@ -18,4 +18,5 @@ export fn f() void { // backend=stage2 // target=native // -// :14:9: error: type 'tmp.Foo' has no field or member function named 'init' +// :14:9: error: no field or member function named 'init' in 'tmp.Foo' +// :1:13: note: struct declared here diff --git a/test/cases/compile_errors/method_call_with_first_arg_type_wrong_container.zig b/test/cases/compile_errors/method_call_with_first_arg_type_wrong_container.zig index 0820151ff1..9e05a370f9 100644 --- a/test/cases/compile_errors/method_call_with_first_arg_type_wrong_container.zig +++ b/test/cases/compile_errors/method_call_with_first_arg_type_wrong_container.zig @@ -27,4 +27,5 @@ export fn foo() void { // backend=llvm // target=native // -// :23:6: error: type 'tmp.List' has no field or member function named 'init' +// :23:6: error: no field or member function named 'init' in 'tmp.List' +// :1:14: note: struct declared here diff --git a/test/cases/compile_errors/stage2/union_extra_field.zig b/test/cases/compile_errors/stage2/union_extra_field.zig index 0488ce183c..6d1c644bc6 100644 --- a/test/cases/compile_errors/stage2/union_extra_field.zig +++ b/test/cases/compile_errors/stage2/union_extra_field.zig @@ -16,5 +16,5 @@ export fn entry() usize { // error // target=native // -// :10:5: error: enum 'tmp.E' has no field named 'd' +// :10:5: error: no field named 'd' in enum 'tmp.E' // :1:11: note: enum declared here diff --git a/test/cases/x86_64-linux/hello_world_with_updates.0.zig b/test/cases/x86_64-linux/hello_world_with_updates.0.zig index 47b5e9db7a..4816ec1b26 100644 --- a/test/cases/x86_64-linux/hello_world_with_updates.0.zig +++ b/test/cases/x86_64-linux/hello_world_with_updates.0.zig @@ -3,3 +3,4 @@ // target=x86_64-linux // // :107:9: error: struct 'tmp.tmp' has no member named 'main' +// :7:1: note: struct declared here diff --git a/test/cases/x86_64-macos/hello_world_with_updates.0.zig b/test/cases/x86_64-macos/hello_world_with_updates.0.zig index dd43748e6e..998b2f13eb 100644 --- a/test/cases/x86_64-macos/hello_world_with_updates.0.zig +++ b/test/cases/x86_64-macos/hello_world_with_updates.0.zig @@ -3,3 +3,4 @@ // target=x86_64-macos // // :107:9: error: struct 'tmp.tmp' has no member named 'main' +// :7:1: note: struct declared here diff --git a/test/stage2/cbe.zig b/test/stage2/cbe.zig index cf0f307af3..644cba74c1 100644 --- a/test/stage2/cbe.zig +++ b/test/stage2/cbe.zig @@ -839,7 +839,7 @@ pub fn addCases(ctx: *TestContext) !void { \\ _ = x; \\} , &.{ - ":3:17: error: enum 'tmp.E' has no field named 'd'", + ":3:17: error: no field named 'd' in enum 'tmp.E'", ":1:11: note: enum declared here", }); }