aboutsummaryrefslogtreecommitdiff
path: root/test/compile_errors.zig
diff options
context:
space:
mode:
authorantlilja <liljaanton2001@gmail.com>2020-06-24 19:12:42 +0200
committerantlilja <liljaanton2001@gmail.com>2020-07-01 16:09:36 +0200
commitdcc406deff0fb4ee3c2cd1f4ff8614e972a8ea7a (patch)
treece198a2b6005c96a74a65de3b7af7126efc7be23 /test/compile_errors.zig
parente60be3082499ff19078699675044b993f6921ad0 (diff)
downloadzig-dcc406deff0fb4ee3c2cd1f4ff8614e972a8ea7a.tar.gz
zig-dcc406deff0fb4ee3c2cd1f4ff8614e972a8ea7a.zip
Add new error message for unreachable else prongs
* Adds error message for types: enum, int and bool * Adds compile error tests
Diffstat (limited to 'test/compile_errors.zig')
-rw-r--r--test/compile_errors.zig96
1 files changed, 96 insertions, 0 deletions
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
index 3f898cc337..29ff994cd3 100644
--- a/test/compile_errors.zig
+++ b/test/compile_errors.zig
@@ -468,6 +468,102 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
"tmp.zig:12:5: error: switch on non-exhaustive enum must include `else` or `_` prong",
});
+ cases.add("switch expression - unreachable else prong (bool)",
+ \\fn foo(x: bool) void {
+ \\ switch (x) {
+ \\ true => {},
+ \\ false => {},
+ \\ else => {},
+ \\ }
+ \\}
+ \\export fn entry() usize { return @sizeOf(@TypeOf(foo)); }
+ , &[_][]const u8{
+ "tmp.zig:5:9: error: unreachable else prong, all cases already handled",
+ });
+
+ cases.add("switch expression - unreachable else prong (u1)",
+ \\fn foo(x: u1) void {
+ \\ switch (x) {
+ \\ 0 => {},
+ \\ 1 => {},
+ \\ else => {},
+ \\ }
+ \\}
+ \\export fn entry() usize { return @sizeOf(@TypeOf(foo)); }
+ , &[_][]const u8{
+ "tmp.zig:5:9: error: unreachable else prong, all cases already handled",
+ });
+
+ cases.add("switch expression - unreachable else prong (u2)",
+ \\fn foo(x: u2) void {
+ \\ switch (x) {
+ \\ 0 => {},
+ \\ 1 => {},
+ \\ 2 => {},
+ \\ 3 => {},
+ \\ else => {},
+ \\ }
+ \\}
+ \\export fn entry() usize { return @sizeOf(@TypeOf(foo)); }
+ , &[_][]const u8{
+ "tmp.zig:7:9: error: unreachable else prong, all cases already handled",
+ });
+
+ cases.add("switch expression - unreachable else prong (range u8)",
+ \\fn foo(x: u8) void {
+ \\ switch (x) {
+ \\ 0 => {},
+ \\ 1 => {},
+ \\ 2 => {},
+ \\ 3 => {},
+ \\ 4...255 => {},
+ \\ else => {},
+ \\ }
+ \\}
+ \\export fn entry() usize { return @sizeOf(@TypeOf(foo)); }
+ , &[_][]const u8{
+ "tmp.zig:8:9: error: unreachable else prong, all cases already handled",
+ });
+
+ cases.add("switch expression - unreachable else prong (range i8)",
+ \\fn foo(x: i8) void {
+ \\ switch (x) {
+ \\ -128...0 => {},
+ \\ 1 => {},
+ \\ 2 => {},
+ \\ 3 => {},
+ \\ 4...127 => {},
+ \\ else => {},
+ \\ }
+ \\}
+ \\export fn entry() usize { return @sizeOf(@TypeOf(foo)); }
+ , &[_][]const u8{
+ "tmp.zig:8:9: error: unreachable else prong, all cases already handled",
+ });
+
+ cases.add("switch expression - unreachable else prong (enum)",
+ \\const TestEnum = enum{ T1, T2 };
+ \\
+ \\fn err(x: u8) TestEnum {
+ \\ switch (x) {
+ \\ 0 => return TestEnum.T1,
+ \\ else => return TestEnum.T2,
+ \\ }
+ \\}
+ \\
+ \\fn foo(x: u8) void {
+ \\ switch (err(x)) {
+ \\ TestEnum.T1 => {},
+ \\ TestEnum.T2 => {},
+ \\ else => {},
+ \\ }
+ \\}
+ \\
+ \\export fn entry() usize { return @sizeOf(@TypeOf(foo)); }
+ , &[_][]const u8{
+ "tmp.zig:14:9: error: unreachable else prong, all cases already handled",
+ });
+
cases.addTest("@export with empty name string",
\\pub export fn entry() void { }
\\comptime {