aboutsummaryrefslogtreecommitdiff
path: root/test/cases/compile_errors
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-12-03 00:42:11 -0500
committerGitHub <noreply@github.com>2022-12-03 00:42:11 -0500
commitfdbb0fb7b9c08ebff1b7e45ef89f7160f350d44c (patch)
tree714f2766c64ace45df1f7d67ca70be0c88193184 /test/cases/compile_errors
parentc43ac67f82cb5a022df67729aa1e6bebc22cfff2 (diff)
parentb500e0eb179218f5eb03408c09b5e5a928f0c46e (diff)
downloadzig-fdbb0fb7b9c08ebff1b7e45ef89f7160f350d44c.tar.gz
zig-fdbb0fb7b9c08ebff1b7e45ef89f7160f350d44c.zip
Merge pull request #13744 from Vexu/stage2-fixes
Improve error messages, fix dependency loops
Diffstat (limited to 'test/cases/compile_errors')
-rw-r--r--test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig1
-rw-r--r--test/cases/compile_errors/casting_bit_offset_pointer_to_regular_pointer.zig1
-rw-r--r--test/cases/compile_errors/closure_get_in_param_ty_instantiate_incorrectly.zig1
-rw-r--r--test/cases/compile_errors/control_reaches_end_of_non-void_function.zig9
-rw-r--r--test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig1
-rw-r--r--test/cases/compile_errors/double_pointer_to_anyopaque_pointer.zig1
-rw-r--r--test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig1
-rw-r--r--test/cases/compile_errors/invalid_compare_string.zig29
-rw-r--r--test/cases/compile_errors/invalid_dependency_on_struct_size.zig19
-rw-r--r--test/cases/compile_errors/missing_parameter_name.zig19
-rw-r--r--test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig1
-rw-r--r--test/cases/compile_errors/struct_init_passed_to_type_param.zig1
-rw-r--r--test/cases/compile_errors/struct_type_mismatch_in_arg.zig18
-rw-r--r--test/cases/compile_errors/switch_on_slice.zig2
-rw-r--r--test/cases/compile_errors/type_error_in_implicit_return.zig17
-rw-r--r--test/cases/compile_errors/wrong_pointer_coerced_to_pointer_to_opaque_{}.zig1
16 files changed, 112 insertions, 10 deletions
diff --git a/test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig b/test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig
index 846a5ff81a..c9e2e2e5eb 100644
--- a/test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig
+++ b/test/cases/compile_errors/calling_var_args_extern_function_passing_array_instead_of_pointer.zig
@@ -8,3 +8,4 @@ pub extern fn foo(format: *const u8, ...) void;
// target=native
//
// :2:16: error: expected type '*const u8', found '[5:0]u8'
+// :4:27: note: parameter type declared here
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 132627557e..7fd38280c6 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
@@ -21,3 +21,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(&foo)); }
// :8:16: error: expected type '*const u3', found '*align(0:3:1) const u3'
// :8:16: note: pointer host size '1' cannot cast into pointer host size '0'
// :8:16: note: pointer bit offset '3' cannot cast into pointer bit offset '0'
+// :11:11: note: parameter type declared here
diff --git a/test/cases/compile_errors/closure_get_in_param_ty_instantiate_incorrectly.zig b/test/cases/compile_errors/closure_get_in_param_ty_instantiate_incorrectly.zig
index dc533442fb..8855755ec1 100644
--- a/test/cases/compile_errors/closure_get_in_param_ty_instantiate_incorrectly.zig
+++ b/test/cases/compile_errors/closure_get_in_param_ty_instantiate_incorrectly.zig
@@ -22,3 +22,4 @@ pub export fn entry() void {
// target=native
//
// :17:25: error: expected type 'u32', found 'type'
+// :3:21: note: parameter type declared here
diff --git a/test/cases/compile_errors/control_reaches_end_of_non-void_function.zig b/test/cases/compile_errors/control_reaches_end_of_non-void_function.zig
deleted file mode 100644
index c92b6b0927..0000000000
--- a/test/cases/compile_errors/control_reaches_end_of_non-void_function.zig
+++ /dev/null
@@ -1,9 +0,0 @@
-fn a() i32 {}
-export fn entry() void { _ = a(); }
-
-// error
-// backend=stage2
-// target=native
-//
-// :1:13: error: expected type 'i32', found 'void'
-// :1:8: note: function return type declared here
diff --git a/test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig b/test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig
index 0074c26de7..3670def4ee 100644
--- a/test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig
+++ b/test/cases/compile_errors/disallow_coercion_from_non-null-terminated_pointer_to_null-terminated_pointer.zig
@@ -11,3 +11,4 @@ pub export fn entry() void {
//
// :5:14: error: expected type '[*:0]const u8', found '[*]const u8'
// :5:14: note: destination pointer requires '0' sentinel
+// :1:20: note: parameter type declared here
diff --git a/test/cases/compile_errors/double_pointer_to_anyopaque_pointer.zig b/test/cases/compile_errors/double_pointer_to_anyopaque_pointer.zig
index 6aa9618dbd..c7e54738d1 100644
--- a/test/cases/compile_errors/double_pointer_to_anyopaque_pointer.zig
+++ b/test/cases/compile_errors/double_pointer_to_anyopaque_pointer.zig
@@ -24,5 +24,6 @@ pub export fn entry3() void {
// :4:35: note: cannot implicitly cast double pointer '*const *const usize' to anyopaque pointer '*const anyopaque'
// :9:10: error: expected type '?*anyopaque', found '*[*:0]u8'
// :9:10: note: cannot implicitly cast double pointer '*[*:0]u8' to anyopaque pointer '?*anyopaque'
+// :11:12: note: parameter type declared here
// :15:35: error: expected type '*const anyopaque', found '*?*usize'
// :15:35: note: cannot implicitly cast double pointer '*?*usize' to anyopaque pointer '*const anyopaque'
diff --git a/test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig b/test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig
index b9a9fb2faf..13adba1b91 100644
--- a/test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig
+++ b/test/cases/compile_errors/implicitly_increasing_pointer_alignment.zig
@@ -18,3 +18,4 @@ fn bar(x: *u32) void {
//
// :8:9: error: expected type '*u32', found '*align(1) u32'
// :8:9: note: pointer alignment '1' cannot cast into pointer alignment '4'
+// :11:11: note: parameter type declared here
diff --git a/test/cases/compile_errors/invalid_compare_string.zig b/test/cases/compile_errors/invalid_compare_string.zig
new file mode 100644
index 0000000000..a5c7f041a5
--- /dev/null
+++ b/test/cases/compile_errors/invalid_compare_string.zig
@@ -0,0 +1,29 @@
+comptime {
+ var a = "foo";
+ if (a == "foo") unreachable;
+}
+comptime {
+ var a = "foo";
+ if (a == ("foo")) unreachable; // intentionally allow
+}
+comptime {
+ var a = "foo";
+ switch (a) {
+ "foo" => unreachable,
+ else => {},
+ }
+}
+comptime {
+ var a = "foo";
+ switch (a) {
+ ("foo") => unreachable, // intentionally allow
+ else => {},
+ }
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :3:11: error: cannot compare strings with ==
+// :12:9: error: cannot switch on strings
diff --git a/test/cases/compile_errors/invalid_dependency_on_struct_size.zig b/test/cases/compile_errors/invalid_dependency_on_struct_size.zig
new file mode 100644
index 0000000000..02ea7e2710
--- /dev/null
+++ b/test/cases/compile_errors/invalid_dependency_on_struct_size.zig
@@ -0,0 +1,19 @@
+comptime {
+ const S = struct {
+ const Foo = struct {
+ y: Bar,
+ };
+ const Bar = struct {
+ y: if (@sizeOf(Foo) == 0) u64 else void,
+ };
+ };
+
+ _ = @sizeOf(S.Foo) + 1;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :6:21: error: struct layout depends on it having runtime bits
+// :4:13: note: while checking this field
diff --git a/test/cases/compile_errors/missing_parameter_name.zig b/test/cases/compile_errors/missing_parameter_name.zig
new file mode 100644
index 0000000000..3e576a1a6d
--- /dev/null
+++ b/test/cases/compile_errors/missing_parameter_name.zig
@@ -0,0 +1,19 @@
+fn f2(u64) u64 {
+ return x;
+}
+fn f3(*x) u64 {
+ return x;
+}
+fn f1(x) u64 {
+ return x;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :1:7: error: missing parameter name
+// :4:7: error: missing parameter name
+// :7:7: error: missing parameter name or type
+// :7:7: note: if this is a name, annotate its type 'x: T'
+// :7:7: note: if this is a type, give it a name '<name>: x'
diff --git a/test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig b/test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig
index 39c55870f1..fd24b58f55 100644
--- a/test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig
+++ b/test/cases/compile_errors/pass_const_ptr_to_mutable_ptr_fn.zig
@@ -16,3 +16,4 @@ export fn entry() usize { return @sizeOf(@TypeOf(&foo)); }
//
// :4:19: error: expected type '*[]const u8', found '*const []const u8'
// :4:19: note: cast discards const qualifier
+// :6:14: note: parameter type declared here
diff --git a/test/cases/compile_errors/struct_init_passed_to_type_param.zig b/test/cases/compile_errors/struct_init_passed_to_type_param.zig
index b00c27986f..01906ac613 100644
--- a/test/cases/compile_errors/struct_init_passed_to_type_param.zig
+++ b/test/cases/compile_errors/struct_init_passed_to_type_param.zig
@@ -12,3 +12,4 @@ export const value = hi(MyStruct{ .x = 12 });
//
// :7:33: error: expected type 'type', found 'tmp.MyStruct'
// :1:18: note: struct declared here
+// :3:19: note: parameter type declared here
diff --git a/test/cases/compile_errors/struct_type_mismatch_in_arg.zig b/test/cases/compile_errors/struct_type_mismatch_in_arg.zig
new file mode 100644
index 0000000000..a52bdfab6c
--- /dev/null
+++ b/test/cases/compile_errors/struct_type_mismatch_in_arg.zig
@@ -0,0 +1,18 @@
+const Foo = struct { i: i32 };
+const Bar = struct { j: i32 };
+
+pub fn helper(_: Foo, _: Bar) void { }
+
+comptime {
+ helper(Bar { .j = 10 }, Bar { .j = 10 });
+ helper(Bar { .i = 10 }, Bar { .j = 10 });
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :7:16: error: expected type 'tmp.Foo', found 'tmp.Bar'
+// :1:13: note: struct declared here
+// :2:13: note: struct declared here
+// :4:18: note: parameter type declared here
diff --git a/test/cases/compile_errors/switch_on_slice.zig b/test/cases/compile_errors/switch_on_slice.zig
index b4644b132c..c2b28f67ab 100644
--- a/test/cases/compile_errors/switch_on_slice.zig
+++ b/test/cases/compile_errors/switch_on_slice.zig
@@ -1,7 +1,7 @@
pub export fn entry() void {
var a: [:0]const u8 = "foo";
switch (a) {
- "--version", "version" => unreachable,
+ ("--version"), ("version") => unreachable,
else => {},
}
}
diff --git a/test/cases/compile_errors/type_error_in_implicit_return.zig b/test/cases/compile_errors/type_error_in_implicit_return.zig
new file mode 100644
index 0000000000..8c8d498c97
--- /dev/null
+++ b/test/cases/compile_errors/type_error_in_implicit_return.zig
@@ -0,0 +1,17 @@
+fn f1(x: bool) u32 {
+ if (x) return 1;
+}
+fn f2() noreturn {}
+pub export fn entry() void {
+ _ = f1(true);
+ _ = f2();
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :1:16: error: function with non-void return type 'u32' implicitly returns
+// :3:1: note: control flow reaches end of body here
+// :4:9: error: function declared 'noreturn' implicitly returns
+// :4:19: note: control flow reaches end of body here
diff --git a/test/cases/compile_errors/wrong_pointer_coerced_to_pointer_to_opaque_{}.zig b/test/cases/compile_errors/wrong_pointer_coerced_to_pointer_to_opaque_{}.zig
index e22c285cb0..a050eb6a4c 100644
--- a/test/cases/compile_errors/wrong_pointer_coerced_to_pointer_to_opaque_{}.zig
+++ b/test/cases/compile_errors/wrong_pointer_coerced_to_pointer_to_opaque_{}.zig
@@ -12,3 +12,4 @@ export fn foo() void {
// :5:9: error: expected type '*tmp.Derp', found '*anyopaque'
// :5:9: note: pointer type child 'anyopaque' cannot cast into pointer type child 'tmp.Derp'
// :1:14: note: opaque declared here
+// :2:18: note: parameter type declared here