Commit 3a4d565254

Andrew Kelley <andrew@ziglang.org>
2023-07-17 06:16:40
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.
1 parent 7c66bd3
Changed files (1)
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 };