mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
add type check to zirSwitchBlockErrUnion
This commit is contained in:
parent
ec358d6db5
commit
6e5bdb5397
14
src/Sema.zig
14
src/Sema.zig
@ -11255,10 +11255,18 @@ fn zirSwitchBlockErrUnion(sema: *Sema, block: *Block, inst: Zir.Inst.Index) Comp
|
||||
defer seen_errors.deinit();
|
||||
|
||||
const operand_ty = sema.typeOf(raw_operand_val);
|
||||
const operand_err_set_ty = if (extra.data.bits.payload_is_ref)
|
||||
operand_ty.childType(mod).errorUnionSet(mod)
|
||||
const operand_err_set = if (extra.data.bits.payload_is_ref)
|
||||
operand_ty.childType(mod)
|
||||
else
|
||||
operand_ty.errorUnionSet(mod);
|
||||
operand_ty;
|
||||
|
||||
if (operand_err_set.zigTypeTag(mod) != .ErrorUnion) {
|
||||
return sema.fail(block, switch_src, "expected error union type, found '{}'", .{
|
||||
operand_ty.fmt(mod),
|
||||
});
|
||||
}
|
||||
|
||||
const operand_err_set_ty = operand_err_set.errorUnionSet(mod);
|
||||
|
||||
const block_inst: Air.Inst.Index = @enumFromInt(sema.air_instructions.len);
|
||||
try sema.air_instructions.append(gpa, .{
|
||||
|
||||
11
test/cases/compile_errors/switch_on_non_err_union.zig
Normal file
11
test/cases/compile_errors/switch_on_non_err_union.zig
Normal file
@ -0,0 +1,11 @@
|
||||
pub fn main() void {
|
||||
false catch |err| switch (err) {
|
||||
else => {},
|
||||
};
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :2:23: error: expected error union type, found 'bool'
|
||||
Loading…
x
Reference in New Issue
Block a user