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'