authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-21 21:22:09+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-07-23 15:40:12+03:00
log5b29275240a57448514fe5c5d9e8edae3b2362cc
treefab3b7e4d0d9a3e17edc9ff14ffd4e67a31af904
parent881c0cb20b8cbde252ab38dff2c76886c4b72f1d

Sema: add some more 'declared here' notes


11 files changed, 25 insertions(+), 32 deletions(-)

src/Sema.zig+13-26
...@@ -6814,12 +6814,7 @@ fn zirIntToEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A...@@ -6814,12 +6814,7 @@ fn zirIntToEnum(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
6814 .{ dest_ty.fmt(sema.mod), int_val.fmtValue(sema.typeOf(operand), sema.mod) },6814 .{ dest_ty.fmt(sema.mod), int_val.fmtValue(sema.typeOf(operand), sema.mod) },
6815 );6815 );
6816 errdefer msg.destroy(sema.gpa);6816 errdefer msg.destroy(sema.gpa);
6817 try sema.mod.errNoteNonLazy(6817 try sema.addDeclaredHereNote(msg, dest_ty);
6818 dest_ty.declSrcLoc(sema.mod),
6819 msg,
6820 "enum declared here",
6821 .{},
6822 );
6823 break :msg msg;6818 break :msg msg;
6824 };6819 };
6825 return sema.failWithOwnedErrorMsg(block, msg);6820 return sema.failWithOwnedErrorMsg(block, msg);
...@@ -19432,16 +19427,7 @@ fn fieldVal(...@@ -19432,16 +19427,7 @@ fn fieldVal(
19432 return inst;19427 return inst;
19433 }19428 }
19434 }19429 }
19435 // TODO add note: declared here19430 return sema.failWithBadMemberAccess(block, child_type, src, field_name);
19436 const kw_name = switch (child_type.zigTypeTag()) {
19437 .Struct => "struct",
19438 .Opaque => "opaque",
19439 .Union => "union",
19440 else => unreachable,
19441 };
19442 return sema.fail(block, src, "{s} '{}' has no member named '{s}'", .{
19443 kw_name, child_type.fmt(sema.mod), field_name,
19444 });
19445 },19431 },
19446 else => {19432 else => {
19447 const msg = msg: {19433 const msg = msg: {
...@@ -19783,7 +19769,13 @@ fn fieldCallBind(...@@ -19783,7 +19769,13 @@ fn fieldCallBind(
19783 else => {},19769 else => {},
19784 }19770 }
1978519771
19786 return sema.fail(block, src, "type '{}' has no field or member function named '{s}'", .{ concrete_ty.fmt(sema.mod), field_name });19772 const msg = msg: {
19773 const msg = try sema.errMsg(block, src, "no field or member function named '{s}' in '{}'", .{ field_name, concrete_ty.fmt(sema.mod) });
19774 errdefer msg.destroy(sema.gpa);
19775 try sema.addDeclaredHereNote(msg, concrete_ty);
19776 break :msg msg;
19777 };
19778 return sema.failWithOwnedErrorMsg(block, msg);
19787}19779}
1978819780
19789fn finishFieldCallBind(19781fn finishFieldCallBind(
...@@ -21176,16 +21168,11 @@ fn coerceExtra(...@@ -21176,16 +21168,11 @@ fn coerceExtra(
21176 const msg = try sema.errMsg(21168 const msg = try sema.errMsg(
21177 block,21169 block,
21178 inst_src,21170 inst_src,
21179 "enum '{}' has no field named '{s}'",21171 "no field named '{s}' in enum '{}'",
21180 .{ dest_ty.fmt(sema.mod), bytes },21172 .{ bytes, dest_ty.fmt(sema.mod) },
21181 );21173 );
21182 errdefer msg.destroy(sema.gpa);21174 errdefer msg.destroy(sema.gpa);
21183 try sema.mod.errNoteNonLazy(21175 try sema.addDeclaredHereNote(msg, dest_ty);
21184 dest_ty.declSrcLoc(sema.mod),
21185 msg,
21186 "enum declared here",
21187 .{},
21188 );
21189 break :msg msg;21176 break :msg msg;
21190 };21177 };
21191 return sema.failWithOwnedErrorMsg(block, msg);21178 return sema.failWithOwnedErrorMsg(block, msg);
...@@ -26230,7 +26217,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {...@@ -26230,7 +26217,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {
26230 const msg = msg: {26217 const msg = msg: {
26231 const tree = try sema.getAstTree(&block_scope);26218 const tree = try sema.getAstTree(&block_scope);
26232 const field_src = enumFieldSrcLoc(decl, tree.*, union_obj.node_offset, field_i);26219 const field_src = enumFieldSrcLoc(decl, tree.*, union_obj.node_offset, field_i);
26233 const msg = try sema.errMsg(&block_scope, field_src, "enum '{}' has no field named '{s}'", .{ union_obj.tag_ty.fmt(sema.mod), field_name });26220 const msg = try sema.errMsg(&block_scope, field_src, "no field named '{s}' in enum '{}'", .{ field_name, union_obj.tag_ty.fmt(sema.mod) });
26234 errdefer msg.destroy(sema.gpa);26221 errdefer msg.destroy(sema.gpa);
26235 try sema.addDeclaredHereNote(msg, union_obj.tag_ty);26222 try sema.addDeclaredHereNote(msg, union_obj.tag_ty);
26236 break :msg msg;26223 break :msg msg;
test/cases/aarch64-macos/hello_world_with_updates.0.zig+1
...@@ -3,3 +3,4 @@...@@ -3,3 +3,4 @@
3// target=aarch64-macos3// target=aarch64-macos
4//4//
5// :107:9: error: struct 'tmp.tmp' has no member named 'main'5// :107:9: error: struct 'tmp.tmp' has no member named 'main'
6// :7:1: note: struct declared here
test/cases/compile_errors/bogus_compile_var.zig+1
...@@ -6,3 +6,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(x)); }...@@ -6,3 +6,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(x)); }
6// target=native6// target=native
7//7//
8// :1:29: error: struct 'builtin.builtin' has no member named 'bogus'8// :1:29: error: struct 'builtin.builtin' has no member named 'bogus'
9// :1:1: note: struct declared here
test/cases/compile_errors/bogus_method_call_on_slice.zig+1-1
...@@ -8,4 +8,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(&f)); }...@@ -8,4 +8,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(&f)); }
8// backend=stage28// backend=stage2
9// target=native9// target=native
10//10//
11// :3:6: error: type '[]const u8' has no field or member function named 'copy'11// :3:6: error: no field or member function named 'copy' in '[]const u8'
test/cases/compile_errors/cast_enum_literal_to_enum_but_it_doesnt_match.zig+1-1
...@@ -11,5 +11,5 @@ export fn entry() void {...@@ -11,5 +11,5 @@ export fn entry() void {
11// backend=stage211// backend=stage2
12// target=native12// target=native
13//13//
14// :6:21: error: enum 'tmp.Foo' has no field named 'c'14// :6:21: error: no field named 'c' in enum 'tmp.Foo'
15// :1:13: note: enum declared here15// :1:13: note: enum declared here
test/cases/compile_errors/method_call_with_first_arg_type_primitive.zig+2-1
...@@ -18,4 +18,5 @@ export fn f() void {...@@ -18,4 +18,5 @@ export fn f() void {
18// backend=stage218// backend=stage2
19// target=native19// target=native
20//20//
21// :14:9: error: type 'tmp.Foo' has no field or member function named 'init'21// :14:9: error: no field or member function named 'init' in 'tmp.Foo'
22// :1:13: note: struct declared here
test/cases/compile_errors/method_call_with_first_arg_type_wrong_container.zig+2-1
...@@ -27,4 +27,5 @@ export fn foo() void {...@@ -27,4 +27,5 @@ export fn foo() void {
27// backend=llvm27// backend=llvm
28// target=native28// target=native
29//29//
30// :23:6: error: type 'tmp.List' has no field or member function named 'init'30// :23:6: error: no field or member function named 'init' in 'tmp.List'
31// :1:14: note: struct declared here
test/cases/compile_errors/stage2/union_extra_field.zig+1-1
...@@ -16,5 +16,5 @@ export fn entry() usize {...@@ -16,5 +16,5 @@ export fn entry() usize {
16// error16// error
17// target=native17// target=native
18//18//
19// :10:5: error: enum 'tmp.E' has no field named 'd'19// :10:5: error: no field named 'd' in enum 'tmp.E'
20// :1:11: note: enum declared here20// :1:11: note: enum declared here
test/cases/x86_64-linux/hello_world_with_updates.0.zig+1
...@@ -3,3 +3,4 @@...@@ -3,3 +3,4 @@
3// target=x86_64-linux3// target=x86_64-linux
4//4//
5// :107:9: error: struct 'tmp.tmp' has no member named 'main'5// :107:9: error: struct 'tmp.tmp' has no member named 'main'
6// :7:1: note: struct declared here
test/cases/x86_64-macos/hello_world_with_updates.0.zig+1
...@@ -3,3 +3,4 @@...@@ -3,3 +3,4 @@
3// target=x86_64-macos3// target=x86_64-macos
4//4//
5// :107:9: error: struct 'tmp.tmp' has no member named 'main'5// :107:9: error: struct 'tmp.tmp' has no member named 'main'
6// :7:1: note: struct declared here
test/stage2/cbe.zig+1-1
...@@ -839,7 +839,7 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -839,7 +839,7 @@ pub fn addCases(ctx: *TestContext) !void {
839 \\ _ = x;839 \\ _ = x;
840 \\}840 \\}
841 , &.{841 , &.{
842 ":3:17: error: enum 'tmp.E' has no field named 'd'",842 ":3:17: error: no field named 'd' in enum 'tmp.E'",
843 ":1:11: note: enum declared here",843 ":1:11: note: enum declared here",
844 });844 });
845 }845 }