| author | |
| committer | |
| log | 5b29275240a57448514fe5c5d9e8edae3b2362cc |
| tree | fab3b7e4d0d9a3e17edc9ff14ffd4e67a31af904 |
| parent | 881c0cb20b8cbde252ab38dff2c76886c4b72f1d |
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 here | 19430 | 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 | } |
| 19785 | 19771 | ||
| 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 | } |
| 19788 | 19780 | ||
| 19789 | fn finishFieldCallBind( | 19781 | fn 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-macos | 3 | // 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=native | 6 | // 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=stage2 | 8 | // backend=stage2 |
| 9 | // target=native | 9 | // 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=stage2 | 11 | // backend=stage2 |
| 12 | // target=native | 12 | // 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 here | 15 | // :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=stage2 | 18 | // backend=stage2 |
| 19 | // target=native | 19 | // 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=llvm | 27 | // backend=llvm |
| 28 | // target=native | 28 | // 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 | // error | 16 | // error |
| 17 | // target=native | 17 | // 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 here | 20 | // :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-linux | 3 | // 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-macos | 3 | // 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 | } |