From f22d8df5dd40d55d639217e2df7cc109ccd32053 Mon Sep 17 00:00:00 2001 From: Mateusz Poliwczak Date: Tue, 4 Nov 2025 12:31:11 +0100 Subject: [PATCH] Add compile errors test cases --- test/cases/compile_errors/callconv_inline.zig | 5 +++ .../decl_literal_must_be_compile_known.zig | 31 +++++++++++++++++++ .../decl_literal_must_be_compile_known2.zig | 16 ++++++++++ .../compile_errors/extern_no_initializer.zig | 6 ++++ .../function_prototype_inferred_error_set.zig | 4 +++ .../non_packed_struct_backing.zig | 4 +++ .../compile_errors/variable_missing_value.zig | 11 +++++++ 7 files changed, 77 insertions(+) create mode 100644 test/cases/compile_errors/callconv_inline.zig create mode 100644 test/cases/compile_errors/decl_literal_must_be_compile_known.zig create mode 100644 test/cases/compile_errors/decl_literal_must_be_compile_known2.zig create mode 100644 test/cases/compile_errors/extern_no_initializer.zig create mode 100644 test/cases/compile_errors/function_prototype_inferred_error_set.zig create mode 100644 test/cases/compile_errors/non_packed_struct_backing.zig create mode 100644 test/cases/compile_errors/variable_missing_value.zig diff --git a/test/cases/compile_errors/callconv_inline.zig b/test/cases/compile_errors/callconv_inline.zig new file mode 100644 index 0000000000..18d2f7ca20 --- /dev/null +++ b/test/cases/compile_errors/callconv_inline.zig @@ -0,0 +1,5 @@ +inline fn entry() callconv(.c) void {} + +// error +// +// :1:29: error: explicit callconv incompatible with inline keyword diff --git a/test/cases/compile_errors/decl_literal_must_be_compile_known.zig b/test/cases/compile_errors/decl_literal_must_be_compile_known.zig new file mode 100644 index 0000000000..e04c05034e --- /dev/null +++ b/test/cases/compile_errors/decl_literal_must_be_compile_known.zig @@ -0,0 +1,31 @@ +pub const X = enum { + var foo: X = .field; + var undef: X = undefined; + + field, +}; + +pub const Y = enum { + var undef: Y = undefined; + + field, + field2, +}; + +export fn entry() void { + { + const foo: X = .foo; // works since X.foo is of type X (enum with only one field). + _ = foo; + } + { + const foo: X = .undef; // works since X.undef is of type X (enum with only one field). + _ = foo; + } + { + const foo: Y = .undef; + _ = foo; + } +} +// error +// +// :25:25: error: decl literal must be comptime-known diff --git a/test/cases/compile_errors/decl_literal_must_be_compile_known2.zig b/test/cases/compile_errors/decl_literal_must_be_compile_known2.zig new file mode 100644 index 0000000000..b2f637491e --- /dev/null +++ b/test/cases/compile_errors/decl_literal_must_be_compile_known2.zig @@ -0,0 +1,16 @@ +pub const Y = enum { + var foo: Y = .field; + + field, + field2, +}; + +export fn entry() void { + { + const foo: Y = .foo; + _ = foo; + } +} +// error +// +// :10:25: error: decl literal must be comptime-known diff --git a/test/cases/compile_errors/extern_no_initializer.zig b/test/cases/compile_errors/extern_no_initializer.zig new file mode 100644 index 0000000000..270e64ae65 --- /dev/null +++ b/test/cases/compile_errors/extern_no_initializer.zig @@ -0,0 +1,6 @@ +extern var foo = 1; +extern const bar = 2; +// error +// +// :1:18: error: extern variables have no initializers +// :2:20: error: extern variables have no initializers diff --git a/test/cases/compile_errors/function_prototype_inferred_error_set.zig b/test/cases/compile_errors/function_prototype_inferred_error_set.zig new file mode 100644 index 0000000000..32c207fec8 --- /dev/null +++ b/test/cases/compile_errors/function_prototype_inferred_error_set.zig @@ -0,0 +1,4 @@ +extern fn entry1() !void; +// error +// +// 1:20: error: function prototype may not have inferred error set diff --git a/test/cases/compile_errors/non_packed_struct_backing.zig b/test/cases/compile_errors/non_packed_struct_backing.zig new file mode 100644 index 0000000000..547f5f2b4c --- /dev/null +++ b/test/cases/compile_errors/non_packed_struct_backing.zig @@ -0,0 +1,4 @@ +const T = struct(u8) {}; +// error +// +// :1:18: error: non-packed struct does not support backing integer type diff --git a/test/cases/compile_errors/variable_missing_value.zig b/test/cases/compile_errors/variable_missing_value.zig new file mode 100644 index 0000000000..df0a2098ed --- /dev/null +++ b/test/cases/compile_errors/variable_missing_value.zig @@ -0,0 +1,11 @@ +const a; +const b: u32; + +var c; +var d: u32; +// error +// +// :1:1: error: variables must be initialized +// :2:1: error: variables must be initialized +// :4:1: error: variables must be initialized +// :5:1: error: variables must be initialized