zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 3a4d565254f918bc949179f0f5a6934ef43b4f0d (tree)
parent 7c66bd39be82c09cf004843da058a48769066c3f
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Sun, 16 Jul 2023 21:16:40 -0700

Sema: fix zirStoreNode crash

when other function's inferred error set is the return type of a
function, it should not try to insert the error set into it.

this implies that this branch fixes a bug in master branch.

Diffstat:
Msrc/Sema.zig | 10++++------
1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -5282,12 +5282,10 @@ fn zirStoreNode(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!v // %b = store(%a, %c) // Where %c is an error union or error set. In such case we need to add // to the current function's inferred error set, if any. - if (is_ret and (sema.typeOf(operand).zigTypeTag(mod) == .ErrorUnion or - sema.typeOf(operand).zigTypeTag(mod) == .ErrorSet) and - sema.fn_ret_ty.zigTypeTag(mod) == .ErrorUnion) - { - try sema.addToInferredErrorSet(operand); - } + if (is_ret and sema.fn_ret_ty_ies != null) switch (sema.typeOf(operand).zigTypeTag(mod)) { + .ErrorUnion, .ErrorSet => try sema.addToInferredErrorSet(operand), + else => {}, + }; const ptr_src: LazySrcLoc = .{ .node_offset_store_ptr = inst_data.src_node }; const operand_src: LazySrcLoc = .{ .node_offset_store_operand = inst_data.src_node };