From 1401890ed5194aff3469be0b6919fd8fe2614c7b Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Sun, 28 Aug 2022 13:11:33 +0300 Subject: [PATCH] Sema: add error for switch on slice Closes #12651 --- src/Sema.zig | 3 +++ test/cases/compile_errors/switch_on_slice.zig | 13 +++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 test/cases/compile_errors/switch_on_slice.zig diff --git a/src/Sema.zig b/src/Sema.zig index 047d3f84c2..17d3b02da3 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -9003,6 +9003,9 @@ fn zirSwitchCond( .ErrorSet, .Enum, => { + if (operand_ty.isSlice()) { + return sema.fail(block, src, "switch on type '{}'", .{operand_ty.fmt(sema.mod)}); + } if ((try sema.typeHasOnePossibleValue(block, operand_src, operand_ty))) |opv| { return sema.addConstant(operand_ty, opv); } diff --git a/test/cases/compile_errors/switch_on_slice.zig b/test/cases/compile_errors/switch_on_slice.zig new file mode 100644 index 0000000000..b4644b132c --- /dev/null +++ b/test/cases/compile_errors/switch_on_slice.zig @@ -0,0 +1,13 @@ +pub export fn entry() void { + var a: [:0]const u8 = "foo"; + switch (a) { + "--version", "version" => unreachable, + else => {}, + } +} + +// error +// backend=stage2 +// target=native +// +// :3:13: error: switch on type '[:0]const u8'