diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-07-11 20:45:27 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-11 20:45:27 -0400 |
| commit | 7d2e14267985df0226a5deee96d0c17c94bf6eb2 (patch) | |
| tree | 7ed0b99d42c983c1ed2246d0094600a9425c65c0 /test/cases/compile_errors | |
| parent | dc815e5e8f194a03988624a6bf7e739ddfe0d3b4 (diff) | |
| parent | 20d4f7213dde1ffabe0880bbee46a1de44d586fc (diff) | |
| download | zig-7d2e14267985df0226a5deee96d0c17c94bf6eb2.tar.gz zig-7d2e14267985df0226a5deee96d0c17c94bf6eb2.zip | |
Merge pull request #12044 from Vexu/stage2-compile-errors
Sema: add detailed error notes to `coerceInMemoryAllowed`
Diffstat (limited to 'test/cases/compile_errors')
47 files changed, 249 insertions, 173 deletions
diff --git a/test/cases/compile_errors/address_of_number_literal.zig b/test/cases/compile_errors/address_of_number_literal.zig index 2d8380634a..c6b41a1495 100644 --- a/test/cases/compile_errors/address_of_number_literal.zig +++ b/test/cases/compile_errors/address_of_number_literal.zig @@ -8,3 +8,5 @@ export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } // target=native // // :3:30: error: expected type '*const i32', found '*const comptime_int' +// :3:30: note: pointer type child 'comptime_int' cannot cast into pointer type child 'i32' +// :3:10: note: function return type declared here diff --git a/test/cases/compile_errors/any_typed_null_to_any_typed_optional.zig b/test/cases/compile_errors/any_typed_null_to_any_typed_optional.zig index ad6427d224..6b3ffaca2f 100644 --- a/test/cases/compile_errors/any_typed_null_to_any_typed_optional.zig +++ b/test/cases/compile_errors/any_typed_null_to_any_typed_optional.zig @@ -1,11 +1,11 @@ -pub fn main() void { +pub export fn entry() void { var a: ?*anyopaque = undefined; a = @as(?usize, null); } // error -// output_mode=Exe -// backend=stage2,llvm -// target=x86_64-linux,x86_64-macos +// backend=stage2 +// target=native // -// :3:21: error: expected type '*anyopaque', found '?usize' +// :3:21: error: expected type '?*anyopaque', found '?usize' +// :3:21: note: optional type child 'usize' cannot cast into optional type child '*anyopaque' diff --git a/test/cases/compile_errors/stage1/obj/assigning_to_struct_or_union_fields_that_are_not_optionals_with_a_function_that_returns_an_optional.zig b/test/cases/compile_errors/assigning_to_struct_or_union_fields_that_are_not_optionals_with_a_function_that_returns_an_optional.zig index 8285991c05..762eb284f2 100644 --- a/test/cases/compile_errors/stage1/obj/assigning_to_struct_or_union_fields_that_are_not_optionals_with_a_function_that_returns_an_optional.zig +++ b/test/cases/compile_errors/assigning_to_struct_or_union_fields_that_are_not_optionals_with_a_function_that_returns_an_optional.zig @@ -15,7 +15,9 @@ export fn entry() void { } // error -// backend=stage1 +// backend=stage2 // target=native // -// tmp.zig:11:27: error: cannot convert optional to payload type. consider using `.?`, `orelse`, or `if`. expected type 'u8', found '?u8' +// :11:27: error: expected type 'u8', found '?u8' +// :11:27: note: cannot convert optional to payload type +// :11:27: note: consider using `.?`, `orelse`, or `if` diff --git a/test/cases/compile_errors/stage1/obj/attempted_implicit_cast_from_const_T_to_array_len_1_T.zig b/test/cases/compile_errors/attempted_implicit_cast_from_const_T_to_array_len_1_T.zig index 760866dd65..b553d492ae 100644 --- a/test/cases/compile_errors/stage1/obj/attempted_implicit_cast_from_const_T_to_array_len_1_T.zig +++ b/test/cases/compile_errors/attempted_implicit_cast_from_const_T_to_array_len_1_T.zig @@ -7,8 +7,8 @@ export fn entry(byte: u8) void { } // error -// backend=stage1 +// backend=stage2 // target=native // -// tmp.zig:4:22: error: expected type '*[1]i32', found '*const i32' -// tmp.zig:4:22: note: cast discards const qualifier +// :4:22: error: expected type '*[1]i32', found '*const i32' +// :4:22: note: cast discards const qualifier diff --git a/test/cases/compile_errors/cast_between_optional_T_where_T_is_not_a_pointer.zig b/test/cases/compile_errors/cast_between_optional_T_where_T_is_not_a_pointer.zig new file mode 100644 index 0000000000..dcccd0fb8a --- /dev/null +++ b/test/cases/compile_errors/cast_between_optional_T_where_T_is_not_a_pointer.zig @@ -0,0 +1,26 @@ +pub const fnty1 = ?*const fn (i8) void; +pub const fnty2 = ?*const fn (u64) void; +export fn entry1() void { + var a: fnty1 = undefined; + var b: fnty2 = undefined; + a = b; +} + +pub const fnty3 = ?*const fn (u63) void; +export fn entry2() void { + var a: fnty3 = undefined; + var b: fnty2 = undefined; + a = b; +} + +// error +// backend=stage2 +// target=native +// +// :6:9: error: expected type '?*const fn(i8) void', found '?*const fn(u64) void' +// :6:9: note: pointer type child 'fn(u64) void' cannot cast into pointer type child 'fn(i8) void' +// :6:9: note: parameter 0 'u64' cannot cast into 'i8' +// :6:9: note: unsigned 64-bit int cannot represent all possible signed 8-bit values +// :13:9: error: expected type '?*const fn(u63) void', found '?*const fn(u64) void' +// :13:9: note: pointer type child 'fn(u64) void' cannot cast into pointer type child 'fn(u63) void' +// :13:9: note: parameter 0 'u64' cannot cast into 'u63' diff --git a/test/cases/compile_errors/cast_error_union_of_global_error_set_to_error_union_of_smaller_error_set.zig b/test/cases/compile_errors/cast_error_union_of_global_error_set_to_error_union_of_smaller_error_set.zig new file mode 100644 index 0000000000..36a17d734b --- /dev/null +++ b/test/cases/compile_errors/cast_error_union_of_global_error_set_to_error_union_of_smaller_error_set.zig @@ -0,0 +1,15 @@ +const SmallErrorSet = error{A}; +export fn entry() void { + var x: SmallErrorSet!i32 = foo(); + _ = x; +} +fn foo() anyerror!i32 { + return error.B; +} + +// error +// backend=stage2 +// target=native +// +// :3:35: error: expected type 'error{A}!i32', found 'anyerror!i32' +// :3:35: note: global error set cannot cast into a smaller set diff --git a/test/cases/compile_errors/stage1/obj/cast_global_error_set_to_error_set.zig b/test/cases/compile_errors/cast_global_error_set_to_error_set.zig index be9487cc5a..39d9474016 100644 --- a/test/cases/compile_errors/stage1/obj/cast_global_error_set_to_error_set.zig +++ b/test/cases/compile_errors/cast_global_error_set_to_error_set.zig @@ -8,8 +8,8 @@ fn foo() anyerror { } // error -// backend=stage1 +// backend=stage2 // target=native // -// tmp.zig:3:31: error: expected type 'SmallErrorSet', found 'anyerror' -// tmp.zig:3:31: note: cannot cast global error set into smaller set +// :3:31: error: expected type 'error{A}', found 'anyerror' +// :3:31: note: global error set cannot cast into a smaller set diff --git a/test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig b/test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig index 083d68ee40..f25a4a656b 100644 --- a/test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig +++ b/test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig @@ -19,3 +19,5 @@ export fn entry() usize { return @sizeOf(@TypeOf(&foo)); } // target=native // // :8:15: error: expected type '*const u3', found '*align(0:3:1) const u3' +// :8:15: note: pointer host size '1' cannot cast into pointer host size '0' +// :8:15: note: pointer bit offset '3' cannot cast into pointer bit offset '0' diff --git a/test/cases/compile_errors/discarding_error_value.zig b/test/cases/compile_errors/discarding_error_value.zig index f74fc4ea29..6dfe0be231 100644 --- a/test/cases/compile_errors/discarding_error_value.zig +++ b/test/cases/compile_errors/discarding_error_value.zig @@ -9,4 +9,5 @@ fn foo() !void { // backend=stage2 // target=native // -// :2:12: error: error is discarded. consider using `try`, `catch`, or `if` +// :2:12: error: error is discarded +// :2:12: note: consider using `try`, `catch`, or `if` diff --git a/test/cases/compile_errors/dont_implicit_cast_double_pointer_to_anyopaque.zig b/test/cases/compile_errors/dont_implicit_cast_double_pointer_to_anyopaque.zig index 2ba566f221..44ae18ae8a 100644 --- a/test/cases/compile_errors/dont_implicit_cast_double_pointer_to_anyopaque.zig +++ b/test/cases/compile_errors/dont_implicit_cast_double_pointer_to_anyopaque.zig @@ -11,3 +11,4 @@ export fn entry() void { // target=native // // :5:28: error: expected type '*anyopaque', found '**u32' +// :5:28: note: pointer type child '*u32' cannot cast into pointer type child 'anyopaque' diff --git a/test/cases/compile_errors/error_note_for_function_parameter_incompatibility.zig b/test/cases/compile_errors/error_note_for_function_parameter_incompatibility.zig new file mode 100644 index 0000000000..c43df47dfd --- /dev/null +++ b/test/cases/compile_errors/error_note_for_function_parameter_incompatibility.zig @@ -0,0 +1,13 @@ +fn do_the_thing(func: *const fn (arg: i32) void) void { _ = func; } +fn bar(arg: bool) void { _ = arg; } +export fn entry() void { + do_the_thing(bar); +} + +// error +// backend=stage2 +// target=native +// +// :4:17: error: expected type '*const fn(i32) void', found '*const fn(bool) void' +// :4:17: note: pointer type child 'fn(bool) void' cannot cast into pointer type child 'fn(i32) void' +// :4:17: note: parameter 0 'bool' cannot cast into 'i32' diff --git a/test/cases/compile_errors/ignored_deferred_function_call.zig b/test/cases/compile_errors/ignored_deferred_function_call.zig index 69df8b0498..05c4373705 100644 --- a/test/cases/compile_errors/ignored_deferred_function_call.zig +++ b/test/cases/compile_errors/ignored_deferred_function_call.zig @@ -7,4 +7,5 @@ fn bar() anyerror!i32 { return 0; } // backend=stage2 // target=native // -// :2:14: error: error is ignored. consider using `try`, `catch`, or `if` +// :2:14: error: error is ignored +// :2:14: note: consider using `try`, `catch`, or `if` diff --git a/test/cases/compile_errors/ignored_expression_in_while_continuation.zig b/test/cases/compile_errors/ignored_expression_in_while_continuation.zig index d295d476ab..d7de0aac57 100644 --- a/test/cases/compile_errors/ignored_expression_in_while_continuation.zig +++ b/test/cases/compile_errors/ignored_expression_in_while_continuation.zig @@ -17,6 +17,9 @@ fn bad() anyerror!void { // backend=stage2 // target=native // -// :2:24: error: error is ignored. consider using `try`, `catch`, or `if` -// :6:25: error: error is ignored. consider using `try`, `catch`, or `if` -// :10:25: error: error is ignored. consider using `try`, `catch`, or `if` +// :2:24: error: error is ignored +// :2:24: note: consider using `try`, `catch`, or `if` +// :6:25: error: error is ignored +// :6:25: note: consider using `try`, `catch`, or `if` +// :10:25: error: error is ignored +// :10:25: note: consider using `try`, `catch`, or `if` diff --git a/test/cases/compile_errors/stage1/obj/implicit_cast_of_error_set_not_a_subset.zig b/test/cases/compile_errors/implicit_cast_of_error_set_not_a_subset.zig index 5958a41639..0a182343b9 100644 --- a/test/cases/compile_errors/stage1/obj/implicit_cast_of_error_set_not_a_subset.zig +++ b/test/cases/compile_errors/implicit_cast_of_error_set_not_a_subset.zig @@ -9,8 +9,8 @@ fn foo(set1: Set1) void { } // error -// backend=stage1 +// backend=stage2 // target=native // -// tmp.zig:7:19: error: expected type 'Set2', found 'Set1' -// tmp.zig:1:23: note: 'error.B' not a member of destination error set +// :7:19: error: expected type 'error{A,C}', found 'error{A,B}' +// :7:19: note: 'error.B' not a member of destination error set diff --git a/test/cases/compile_errors/implicit_cast_to_c_ptr_from_int.zig b/test/cases/compile_errors/implicit_cast_to_c_ptr_from_int.zig new file mode 100644 index 0000000000..bcf15569ff --- /dev/null +++ b/test/cases/compile_errors/implicit_cast_to_c_ptr_from_int.zig @@ -0,0 +1,15 @@ +const std = @import("std"); +export fn entry1() void { + _ = @as([*c]u8, @as(u65, std.math.maxInt(u65))); +} +export fn entry2() void { + _ = @as([*c]u8, std.math.maxInt(u65)); +} + +// error +// backend=stage2 +// target=native +// +// :3:21: error: expected type '[*c]u8', found 'u65' +// :3:21: note: unsigned 64-bit int cannot represent all possible unsigned 65-bit values +// :6:36: error: expected type '[*c]u8', found 'comptime_int' diff --git a/test/cases/compile_errors/implicit_casting_C_pointers_which_would_mess_up_null_semantics.zig b/test/cases/compile_errors/implicit_casting_C_pointers_which_would_mess_up_null_semantics.zig new file mode 100644 index 0000000000..ecdc6c14c9 --- /dev/null +++ b/test/cases/compile_errors/implicit_casting_C_pointers_which_would_mess_up_null_semantics.zig @@ -0,0 +1,26 @@ +export fn entry() void { + var slice: []const u8 = "aoeu"; + const opt_many_ptr: [*]const u8 = slice.ptr; + var ptr_opt_many_ptr = &opt_many_ptr; + var c_ptr: [*c]const [*c]const u8 = ptr_opt_many_ptr; + ptr_opt_many_ptr = c_ptr; +} +export fn entry2() void { + var buf: [4]u8 = "aoeu".*; + var slice: []u8 = &buf; + var opt_many_ptr: [*]u8 = slice.ptr; + var ptr_opt_many_ptr = &opt_many_ptr; + var c_ptr: [*c][*c]const u8 = ptr_opt_many_ptr; + _ = c_ptr; +} + +// error +// backend=stage2 +// target=native +// +// :6:24: error: expected type '*const [*]const u8', found '[*c]const [*c]const u8' +// :6:24: note: pointer type child '[*c]const u8' cannot cast into pointer type child '[*]const u8' +// :6:24: note: '[*c]const u8' could have null values which are illegal in type '[*]const u8' +// :13:35: error: expected type '[*c][*c]const u8', found '*[*]u8' +// :13:35: note: pointer type child '[*]u8' cannot cast into pointer type child '[*c]const u8' +// :13:35: note: mutable '[*]u8' allows illegal null values stored to type '[*c]const u8' diff --git a/test/cases/compile_errors/implicitly_casting_enum_to_tag_type.zig b/test/cases/compile_errors/implicitly_casting_enum_to_tag_type.zig index b1930cb548..2f7686c93d 100644 --- a/test/cases/compile_errors/implicitly_casting_enum_to_tag_type.zig +++ b/test/cases/compile_errors/implicitly_casting_enum_to_tag_type.zig @@ -15,3 +15,4 @@ export fn entry() void { // target=native // // :9:22: error: expected type 'u2', found 'tmp.Small' +// :1:15: note: enum declared here diff --git a/test/cases/compile_errors/incompatible_sentinels.zig b/test/cases/compile_errors/incompatible_sentinels.zig new file mode 100644 index 0000000000..821a0a8c69 --- /dev/null +++ b/test/cases/compile_errors/incompatible_sentinels.zig @@ -0,0 +1,31 @@ +// Note: One of the error messages here is backwards. It would be nice to fix, but that's not +// going to stop me from merging this branch which fixes a bunch of other stuff. +export fn entry1(ptr: [*:255]u8) [*:0]u8 { + return ptr; +} +export fn entry2(ptr: [*]u8) [*:0]u8 { + return ptr; +} +export fn entry3() void { + var array: [2:0]u8 = [_:255]u8{ 1, 2 }; + _ = array; +} +export fn entry4() void { + var array: [2:0]u8 = [_]u8{ 1, 2 }; + _ = array; +} + +// error +// backend=stage2 +// target=native +// +// :4:12: error: expected type '[*:0]u8', found '[*:255]u8' +// :4:12: note: pointer sentinel '255' cannot cast into pointer sentinel '0' +// :3:35: note: function return type declared here +// :7:12: error: expected type '[*:0]u8', found '[*]u8' +// :7:12: note: destination pointer requires '0' sentinel +// :6:31: note: function return type declared here +// :10:35: error: expected type '[2:0]u8', found '[2:255]u8' +// :10:35: note: array sentinel '255' cannot cast into array sentinel '0' +// :14:31: error: expected type '[2:0]u8', found '[2]u8' +// :14:31: note: destination array requires '0' sentinel diff --git a/test/cases/compile_errors/incorrect_return_type.zig b/test/cases/compile_errors/incorrect_return_type.zig index b37cbebc7f..57cf54a023 100644 --- a/test/cases/compile_errors/incorrect_return_type.zig +++ b/test/cases/compile_errors/incorrect_return_type.zig @@ -19,3 +19,6 @@ // target=native // // :8:16: error: expected type 'tmp.A', found 'tmp.B' +// :10:12: note: struct declared here +// :4:12: note: struct declared here +// :7:11: note: function return type declared here diff --git a/test/cases/compile_errors/invalid_address_space_coercion.zig b/test/cases/compile_errors/invalid_address_space_coercion.zig index fd49aecb32..4633b12e0f 100644 --- a/test/cases/compile_errors/invalid_address_space_coercion.zig +++ b/test/cases/compile_errors/invalid_address_space_coercion.zig @@ -11,3 +11,5 @@ pub fn main() void { // target=x86_64-linux,x86_64-macos // // :2:12: error: expected type '*i32', found '*addrspace(.gs) i32' +// :2:12: note: address space 'gs' cannot cast into address space 'generic' +// :1:34: note: function return type declared here diff --git a/test/cases/compile_errors/invalid_cast_from_integral_type_to_enum.zig b/test/cases/compile_errors/invalid_cast_from_integral_type_to_enum.zig index ce2f64169b..0041976683 100644 --- a/test/cases/compile_errors/invalid_cast_from_integral_type_to_enum.zig +++ b/test/cases/compile_errors/invalid_cast_from_integral_type_to_enum.zig @@ -15,3 +15,4 @@ fn foo(x: usize) void { // target=native // // :9:10: error: expected type 'usize', found 'tmp.E' +// :1:11: note: enum declared here diff --git a/test/cases/compile_errors/invalid_pointer_keeps_address_space_when_taking_address_of_dereference.zig b/test/cases/compile_errors/invalid_pointer_keeps_address_space_when_taking_address_of_dereference.zig index 1560dcc46a..4d7b3c627b 100644 --- a/test/cases/compile_errors/invalid_pointer_keeps_address_space_when_taking_address_of_dereference.zig +++ b/test/cases/compile_errors/invalid_pointer_keeps_address_space_when_taking_address_of_dereference.zig @@ -11,3 +11,5 @@ pub fn main() void { // target=x86_64-linux,x86_64-macos // // :2:12: error: expected type '*i32', found '*addrspace(.gs) i32' +// :2:12: note: address space 'gs' cannot cast into address space 'generic' +// :1:34: note: function return type declared here diff --git a/test/cases/compile_errors/issue_5618_coercion_of_optional_anyopaque_to_anyopaque_must_fail.zig b/test/cases/compile_errors/issue_5618_coercion_of_optional_anyopaque_to_anyopaque_must_fail.zig new file mode 100644 index 0000000000..f4716bc24d --- /dev/null +++ b/test/cases/compile_errors/issue_5618_coercion_of_optional_anyopaque_to_anyopaque_must_fail.zig @@ -0,0 +1,14 @@ +export fn foo() void { + var u: ?*anyopaque = null; + var v: *anyopaque = undefined; + v = u; +} + +// error +// backend=stage2 +// target=native +// +// :4:9: error: expected type '*anyopaque', found '?*anyopaque' +// :4:9: note: cannot convert optional to payload type +// :4:9: note: consider using `.?`, `orelse`, or `if` +// :4:9: note: '?*anyopaque' could have null values which are illegal in type '*anyopaque' diff --git a/test/cases/compile_errors/not_an_enum_type.zig b/test/cases/compile_errors/not_an_enum_type.zig index 6868cf7dc0..063ee8a8d8 100644 --- a/test/cases/compile_errors/not_an_enum_type.zig +++ b/test/cases/compile_errors/not_an_enum_type.zig @@ -17,3 +17,4 @@ const ExpectedVarDeclOrFn = struct {}; // target=native // // :4:9: error: expected type '@typeInfo(tmp.Error).Union.tag_type.?', found 'type' +// :8:1: note: enum declared here diff --git a/test/cases/compile_errors/passing_a_not-aligned-enough_pointer_to_cmpxchg.zig b/test/cases/compile_errors/passing_a_not-aligned-enough_pointer_to_cmpxchg.zig index 3ddd24f7a9..6deb06b1ff 100644 --- a/test/cases/compile_errors/passing_a_not-aligned-enough_pointer_to_cmpxchg.zig +++ b/test/cases/compile_errors/passing_a_not-aligned-enough_pointer_to_cmpxchg.zig @@ -10,3 +10,4 @@ export fn entry() bool { // target=native // // :4:31: error: expected type '*i32', found '*align(1) i32' +// :4:31: note: pointer alignment '1' cannot cast into pointer alignment '4' diff --git a/test/cases/compile_errors/pointer_with_different_address_spaces.zig b/test/cases/compile_errors/pointer_with_different_address_spaces.zig index b16c4a4e64..2bbea3d3b6 100644 --- a/test/cases/compile_errors/pointer_with_different_address_spaces.zig +++ b/test/cases/compile_errors/pointer_with_different_address_spaces.zig @@ -11,3 +11,5 @@ export fn entry2() void { // target=x86_64-linux,x86_64-macos // // :2:12: error: expected type '*addrspace(.fs) i32', found '*addrspace(.gs) i32' +// :2:12: note: address space 'gs' cannot cast into address space 'fs' +// :1:34: note: function return type declared here diff --git a/test/cases/compile_errors/pointers_with_different_address_spaces.zig b/test/cases/compile_errors/pointers_with_different_address_spaces.zig index 210c252893..e952da2af5 100644 --- a/test/cases/compile_errors/pointers_with_different_address_spaces.zig +++ b/test/cases/compile_errors/pointers_with_different_address_spaces.zig @@ -11,3 +11,5 @@ pub fn main() void { // target=x86_64-linux,x86_64-macos // // :2:13: error: expected type '*i32', found '*addrspace(.gs) i32' +// :2:13: note: address space 'gs' cannot cast into address space 'generic' +// :1:35: note: function return type declared here diff --git a/test/cases/compile_errors/stage1/obj/regression_test_2980_base_type_u32_is_not_type_checked_properly_when_assigning_a_value_within_a_struct.zig b/test/cases/compile_errors/regression_test_2980_base_type_u32_is_not_type_checked_properly_when_assigning_a_value_within_a_struct.zig index 8be44fbe05..09c496211a 100644 --- a/test/cases/compile_errors/stage1/obj/regression_test_2980_base_type_u32_is_not_type_checked_properly_when_assigning_a_value_within_a_struct.zig +++ b/test/cases/compile_errors/regression_test_2980_base_type_u32_is_not_type_checked_properly_when_assigning_a_value_within_a_struct.zig @@ -15,7 +15,9 @@ export fn entry() void { } // error -// backend=stage1 +// backend=stage2 // target=native // -// tmp.zig:12:25: error: cannot convert error union to payload type. consider using `try`, `catch`, or `if`. expected type 'u32', found '@typeInfo(@typeInfo(@TypeOf(get_uval)).Fn.return_type.?).ErrorUnion.error_set!u32' +// :12:25: error: expected type 'u32', found '@typeInfo(@typeInfo(@TypeOf(tmp.get_uval)).Fn.return_type.?).ErrorUnion.error_set!u32' +// :12:25: note: cannot convert error union to payload type +// :12:25: note: consider using `try`, `catch`, or `if` diff --git a/test/cases/compile_errors/stage1/obj/result_location_incompatibility_mismatching_handle_is_ptr.zig b/test/cases/compile_errors/result_location_incompatibility_mismatching_handle_is_ptr.zig index 18dd6382fc..cc1d2c976a 100644 --- a/test/cases/compile_errors/stage1/obj/result_location_incompatibility_mismatching_handle_is_ptr.zig +++ b/test/cases/compile_errors/result_location_incompatibility_mismatching_handle_is_ptr.zig @@ -12,7 +12,9 @@ pub const Container = struct { }; // error -// backend=stage1 +// backend=stage2 // target=native // -// tmp.zig:3:36: error: cannot convert optional to payload type. consider using `.?`, `orelse`, or `if`. expected type 'i32', found '?i32' +// :3:36: error: expected type 'i32', found '?i32' +// :3:36: note: cannot convert optional to payload type +// :3:36: note: consider using `.?`, `orelse`, or `if` diff --git a/test/cases/compile_errors/stage1/obj/result_location_incompatibility_mismatching_handle_is_ptr_generic_call.zig b/test/cases/compile_errors/result_location_incompatibility_mismatching_handle_is_ptr_generic_call.zig index 75811c58e1..897675d448 100644 --- a/test/cases/compile_errors/stage1/obj/result_location_incompatibility_mismatching_handle_is_ptr_generic_call.zig +++ b/test/cases/compile_errors/result_location_incompatibility_mismatching_handle_is_ptr_generic_call.zig @@ -12,7 +12,9 @@ pub const Container = struct { }; // error -// backend=stage1 +// backend=stage2 // target=native // -// tmp.zig:3:36: error: cannot convert optional to payload type. consider using `.?`, `orelse`, or `if`. expected type 'i32', found '?i32' +// :3:36: error: expected type 'i32', found '?i32' +// :3:36: note: cannot convert optional to payload type +// :3:36: note: consider using `.?`, `orelse`, or `if` diff --git a/test/cases/compile_errors/shifting_RHS_is_log2_of_LHS_int_bit_width.zig b/test/cases/compile_errors/shifting_RHS_is_log2_of_LHS_int_bit_width.zig index a2104d1aa6..5141062a0b 100644 --- a/test/cases/compile_errors/shifting_RHS_is_log2_of_LHS_int_bit_width.zig +++ b/test/cases/compile_errors/shifting_RHS_is_log2_of_LHS_int_bit_width.zig @@ -7,3 +7,4 @@ export fn entry(x: u8, y: u8) u8 { // target=native // // :2:17: error: expected type 'u3', found 'u8' +// :2:17: note: unsigned 3-bit int cannot represent all possible unsigned 8-bit values diff --git a/test/cases/compile_errors/slice_sentinel_mismatch-2.zig b/test/cases/compile_errors/slice_sentinel_mismatch-2.zig new file mode 100644 index 0000000000..3cc5ac4c39 --- /dev/null +++ b/test/cases/compile_errors/slice_sentinel_mismatch-2.zig @@ -0,0 +1,13 @@ +fn foo() [:0]u8 { + var x: []u8 = undefined; + return x; +} +comptime { _ = foo; } + +// error +// backend=stage2 +// target=native +// +// :3:12: error: expected type '[:0]u8', found '[]u8' +// :3:12: note: destination pointer requires '0' sentinel +// :1:10: note: function return type declared here diff --git a/test/cases/compile_errors/stage1/obj/cast_error_union_of_global_error_set_to_error_union_of_smaller_error_set.zig b/test/cases/compile_errors/stage1/obj/cast_error_union_of_global_error_set_to_error_union_of_smaller_error_set.zig deleted file mode 100644 index 08962afc85..0000000000 --- a/test/cases/compile_errors/stage1/obj/cast_error_union_of_global_error_set_to_error_union_of_smaller_error_set.zig +++ /dev/null @@ -1,16 +0,0 @@ -const SmallErrorSet = error{A}; -export fn entry() void { - var x: SmallErrorSet!i32 = foo(); - _ = x; -} -fn foo() anyerror!i32 { - return error.B; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:3:35: error: expected type 'SmallErrorSet!i32', found 'anyerror!i32' -// tmp.zig:3:35: note: error set 'anyerror' cannot cast into error set 'SmallErrorSet' -// tmp.zig:3:35: note: cannot cast global error set into smaller set diff --git a/test/cases/compile_errors/stage1/obj/error_note_for_function_parameter_incompatibility.zig b/test/cases/compile_errors/stage1/obj/error_note_for_function_parameter_incompatibility.zig deleted file mode 100644 index edc421d8f4..0000000000 --- a/test/cases/compile_errors/stage1/obj/error_note_for_function_parameter_incompatibility.zig +++ /dev/null @@ -1,12 +0,0 @@ -fn do_the_thing(func: fn (arg: i32) void) void { _ = func; } -fn bar(arg: bool) void { _ = arg; } -export fn entry() void { - do_the_thing(bar); -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:4:18: error: expected type 'fn(i32) void', found 'fn(bool) void -// tmp.zig:4:18: note: parameter 0: 'bool' cannot cast into 'i32' diff --git a/test/cases/compile_errors/stage1/obj/implicit_casting_C_pointers_which_would_mess_up_null_semantics.zig b/test/cases/compile_errors/stage1/obj/implicit_casting_C_pointers_which_would_mess_up_null_semantics.zig deleted file mode 100644 index 760bab41da..0000000000 --- a/test/cases/compile_errors/stage1/obj/implicit_casting_C_pointers_which_would_mess_up_null_semantics.zig +++ /dev/null @@ -1,26 +0,0 @@ -export fn entry() void { - var slice: []const u8 = "aoeu"; - const opt_many_ptr: [*]const u8 = slice.ptr; - var ptr_opt_many_ptr = &opt_many_ptr; - var c_ptr: [*c]const [*c]const u8 = ptr_opt_many_ptr; - ptr_opt_many_ptr = c_ptr; -} -export fn entry2() void { - var buf: [4]u8 = "aoeu".*; - var slice: []u8 = &buf; - var opt_many_ptr: [*]u8 = slice.ptr; - var ptr_opt_many_ptr = &opt_many_ptr; - var c_ptr: [*c][*c]const u8 = ptr_opt_many_ptr; - _ = c_ptr; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:6:24: error: expected type '*const [*]const u8', found '[*c]const [*c]const u8' -// tmp.zig:6:24: note: pointer type child '[*c]const u8' cannot cast into pointer type child '[*]const u8' -// tmp.zig:6:24: note: '[*c]const u8' could have null values which are illegal in type '[*]const u8' -// tmp.zig:13:35: error: expected type '[*c][*c]const u8', found '*[*]u8' -// tmp.zig:13:35: note: pointer type child '[*]u8' cannot cast into pointer type child '[*c]const u8' -// tmp.zig:13:35: note: mutable '[*c]const u8' allows illegal null values stored to type '[*]u8' diff --git a/test/cases/compile_errors/stage1/obj/incompatible_sentinels.zig b/test/cases/compile_errors/stage1/obj/incompatible_sentinels.zig deleted file mode 100644 index a292ae3d7c..0000000000 --- a/test/cases/compile_errors/stage1/obj/incompatible_sentinels.zig +++ /dev/null @@ -1,29 +0,0 @@ -// Note: One of the error messages here is backwards. It would be nice to fix, but that's not -// going to stop me from merging this branch which fixes a bunch of other stuff. -export fn entry1(ptr: [*:255]u8) [*:0]u8 { - return ptr; -} -export fn entry2(ptr: [*]u8) [*:0]u8 { - return ptr; -} -export fn entry3() void { - var array: [2:0]u8 = [_:255]u8{ 1, 2 }; - _ = array; -} -export fn entry4() void { - var array: [2:0]u8 = [_]u8{ 1, 2 }; - _ = array; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:4:12: error: expected type '[*:0]u8', found '[*:255]u8' -// tmp.zig:4:12: note: destination pointer requires a terminating '0' sentinel, but source pointer has a terminating '255' sentinel -// tmp.zig:7:12: error: expected type '[*:0]u8', found '[*]u8' -// tmp.zig:7:12: note: destination pointer requires a terminating '0' sentinel -// tmp.zig:10:35: error: expected type '[2:255]u8', found '[2:0]u8' -// tmp.zig:10:35: note: destination array requires a terminating '255' sentinel, but source array has a terminating '0' sentinel -// tmp.zig:14:31: error: expected type '[2:0]u8', found '[2]u8' -// tmp.zig:14:31: note: destination array requires a terminating '0' sentinel diff --git a/test/cases/compile_errors/stage1/obj/issue_5618_coercion_of_optional_anyopaque_to_anyopaque_must_fail.zig b/test/cases/compile_errors/stage1/obj/issue_5618_coercion_of_optional_anyopaque_to_anyopaque_must_fail.zig deleted file mode 100644 index 9ba9910838..0000000000 --- a/test/cases/compile_errors/stage1/obj/issue_5618_coercion_of_optional_anyopaque_to_anyopaque_must_fail.zig +++ /dev/null @@ -1,11 +0,0 @@ -export fn foo() void { - var u: ?*anyopaque = null; - var v: *anyopaque = undefined; - v = u; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:4:9: error: cannot convert optional to payload type. consider using `.?`, `orelse`, or `if`. expected type '*anyopaque', found '?*anyopaque' diff --git a/test/cases/compile_errors/stage1/obj/slice_sentinel_mismatch-2.zig b/test/cases/compile_errors/stage1/obj/slice_sentinel_mismatch-2.zig deleted file mode 100644 index 5f8d312a3c..0000000000 --- a/test/cases/compile_errors/stage1/obj/slice_sentinel_mismatch-2.zig +++ /dev/null @@ -1,12 +0,0 @@ -fn foo() [:0]u8 { - var x: []u8 = undefined; - return x; -} -comptime { _ = foo; } - -// error -// backend=stage1 -// target=native -// -// tmp.zig:3:12: error: expected type '[:0]u8', found '[]u8' -// tmp.zig:3:12: note: destination pointer requires a terminating '0' sentinel diff --git a/test/cases/compile_errors/stage1/obj/type_checking_function_pointers.zig b/test/cases/compile_errors/stage1/obj/type_checking_function_pointers.zig deleted file mode 100644 index b88b6bdb52..0000000000 --- a/test/cases/compile_errors/stage1/obj/type_checking_function_pointers.zig +++ /dev/null @@ -1,13 +0,0 @@ -fn a(b: fn (*const u8) void) void { - b('a'); -} -fn c(d: u8) void {_ = d;} -export fn entry() void { - a(c); -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:6:7: error: expected type 'fn(*const u8) void', found 'fn(u8) void' diff --git a/test/cases/compile_errors/stage1/test/cast_between_optional_T_where_T_is_not_a_pointer.zig b/test/cases/compile_errors/stage1/test/cast_between_optional_T_where_T_is_not_a_pointer.zig deleted file mode 100644 index b8392ff5db..0000000000 --- a/test/cases/compile_errors/stage1/test/cast_between_optional_T_where_T_is_not_a_pointer.zig +++ /dev/null @@ -1,15 +0,0 @@ -pub const fnty1 = ?fn (i8) void; -pub const fnty2 = ?fn (u64) void; -export fn entry() void { - var a: fnty1 = undefined; - var b: fnty2 = undefined; - a = b; -} - -// error -// backend=stage1 -// target=native -// is_test=1 -// -// tmp.zig:6:9: error: expected type '?fn(i8) void', found '?fn(u64) void' -// tmp.zig:6:9: note: optional type child 'fn(u64) void' cannot cast into optional type child 'fn(i8) void' diff --git a/test/cases/compile_errors/stage1/test/helpful_return_type_error_message.zig b/test/cases/compile_errors/stage1/test/helpful_return_type_error_message.zig index 0e97c09de2..b8e48036de 100644 --- a/test/cases/compile_errors/stage1/test/helpful_return_type_error_message.zig +++ b/test/cases/compile_errors/stage1/test/helpful_return_type_error_message.zig @@ -16,15 +16,17 @@ export fn quux() u32 { } // error -// backend=stage1 +// backend=stage2 // target=native -// is_test=1 // -// tmp.zig:2:17: error: expected type 'u32', found 'error{Ohno}' -// tmp.zig:1:17: note: function cannot return an error -// tmp.zig:8:5: error: expected type 'void', found '@typeInfo(@typeInfo(@TypeOf(bar)).Fn.return_type.?).ErrorUnion.error_set' -// tmp.zig:7:17: note: function cannot return an error -// tmp.zig:11:15: error: cannot convert error union to payload type. consider using `try`, `catch`, or `if`. expected type 'u32', found '@typeInfo(@typeInfo(@TypeOf(bar)).Fn.return_type.?).ErrorUnion.error_set!u32' -// tmp.zig:10:17: note: function cannot return an error -// tmp.zig:15:14: error: cannot convert error union to payload type. consider using `try`, `catch`, or `if`. expected type 'u32', found '@typeInfo(@typeInfo(@TypeOf(bar)).Fn.return_type.?).ErrorUnion.error_set!u32' -// tmp.zig:14:5: note: cannot store an error in type 'u32' +// :2:18: error: expected type 'u32', found 'error{Ohno}' +// :1:17: note: function cannot return an error +// :8:5: error: expected type 'void', found '@typeInfo(@typeInfo(@TypeOf(tmp.bar)).Fn.return_type.?).ErrorUnion.error_set' +// :7:17: note: function cannot return an error +// :11:15: error: expected type 'u32', found '@typeInfo(@typeInfo(@TypeOf(tmp.bar)).Fn.return_type.?).ErrorUnion.error_set!u32' +// :10:17: note: function cannot return an error +// :11:15: note: cannot convert error union to payload type +// :11:15: note: consider using `try`, `catch`, or `if` +// :15:14: error: expected type 'u32', found '@typeInfo(@typeInfo(@TypeOf(tmp.bar)).Fn.return_type.?).ErrorUnion.error_set!u32' +// :15:14: note: cannot convert error union to payload type +// :15:14: note: consider using `try`, `catch`, or `if` diff --git a/test/cases/compile_errors/try_in_function_with_non_error_return_type.zig b/test/cases/compile_errors/try_in_function_with_non_error_return_type.zig index 2107c2a397..44d8b9ee56 100644 --- a/test/cases/compile_errors/try_in_function_with_non_error_return_type.zig +++ b/test/cases/compile_errors/try_in_function_with_non_error_return_type.zig @@ -8,3 +8,4 @@ fn something() anyerror!void { } // target=native // // :2:5: error: expected type 'void', found 'anyerror' +// :1:15: note: function cannot return an error diff --git a/test/cases/compile_errors/type_checking_function_pointers.zig b/test/cases/compile_errors/type_checking_function_pointers.zig new file mode 100644 index 0000000000..e6c7a7a1f7 --- /dev/null +++ b/test/cases/compile_errors/type_checking_function_pointers.zig @@ -0,0 +1,15 @@ +fn a(b: *const fn (*const u8) void) void { + _ = b; +} +fn c(d: u8) void {_ = d;} +export fn entry() void { + a(c); +} + +// error +// backend=stage2 +// target=native +// +// :6:6: error: expected type '*const fn(*const u8) void', found '*const fn(u8) void' +// :6:6: note: pointer type child 'fn(u8) void' cannot cast into pointer type child 'fn(*const u8) void' +// :6:6: note: parameter 0 'u8' cannot cast into '*const u8' diff --git a/test/cases/compile_errors/type_mismatch_in_C_prototype_with_varargs.zig b/test/cases/compile_errors/type_mismatch_in_C_prototype_with_varargs.zig index 125ded95d6..66256fc9e9 100644 --- a/test/cases/compile_errors/type_mismatch_in_C_prototype_with_varargs.zig +++ b/test/cases/compile_errors/type_mismatch_in_C_prototype_with_varargs.zig @@ -10,4 +10,6 @@ export fn main() void { // backend=stage2 // target=native // -// :5:22: error: expected type 'fn([*c]u8, ...) callconv(.C) void', found 'fn([*:0]u8, ...) callconv(.C) void' +// :5:22: error: expected type '?fn([*c]u8, ...) callconv(.C) void', found 'fn([*:0]u8, ...) callconv(.C) void' +// :5:22: note: parameter 0 '[*:0]u8' cannot cast into '[*c]u8' +// :5:22: note: '[*c]u8' could have null values which are illegal in type '[*:0]u8' diff --git a/test/cases/compile_errors/unreachable_with_return.zig b/test/cases/compile_errors/unreachable_with_return.zig index cc6439ca0f..5293734c82 100644 --- a/test/cases/compile_errors/unreachable_with_return.zig +++ b/test/cases/compile_errors/unreachable_with_return.zig @@ -5,4 +5,5 @@ export fn entry() void { a(); } // backend=stage2 // target=native // -// :1:18: error: expected type 'noreturn', found 'void' +// :1:18: error: function declared 'noreturn' returns +// :1:8: note: 'noreturn' declared here diff --git a/test/cases/compile_errors/variable_has_wrong_type.zig b/test/cases/compile_errors/variable_has_wrong_type.zig index ec21c610e0..e99921db9f 100644 --- a/test/cases/compile_errors/variable_has_wrong_type.zig +++ b/test/cases/compile_errors/variable_has_wrong_type.zig @@ -8,3 +8,4 @@ export fn f() i32 { // target=native // // :3:12: error: expected type 'i32', found '*const [1:0]u8' +// :1:15: note: function return type declared here diff --git a/test/cases/compile_errors/wrong_type_for_reify_type.zig b/test/cases/compile_errors/wrong_type_for_reify_type.zig index 7f712b441f..b88f6563b5 100644 --- a/test/cases/compile_errors/wrong_type_for_reify_type.zig +++ b/test/cases/compile_errors/wrong_type_for_reify_type.zig @@ -7,3 +7,4 @@ export fn entry() void { // target=native // // :2:15: error: expected type 'builtin.Type', found 'comptime_int' +// :?:?: note: union declared here |
