diff --git a/astgen.c b/astgen.c index 334dc2e8d4..a7acccc50f 100644 --- a/astgen.c +++ b/astgen.c @@ -3336,6 +3336,22 @@ static uint32_t exprRl(GenZir* gz, Scope* scope, ResultLoc rl, uint32_t node) { ZirInstTag break_tag = gz2->is_inline ? ZIR_INST_BREAK_INLINE : ZIR_INST_BREAK; + if (break_tag == ZIR_INST_BREAK_INLINE) { + // AstGen.zig:2328-2330. + addUnNode(gz, ZIR_INST_CHECK_COMPTIME_CONTROL_FLOW, + gz2->continue_block + ZIR_REF_START_INDEX, node); + } + // Restore error return index (AstGen.zig:2333-2334). + if (!gz2->is_comptime) { + ZirInstData rdata; + rdata.un_node.operand + = gz2->continue_block + ZIR_REF_START_INDEX; + rdata.un_node.src_node + = (int32_t)node - (int32_t)gz->decl_node_index; + addInstruction(gz, + ZIR_INST_RESTORE_ERR_RET_INDEX_UNCONDITIONAL, + rdata); + } addBreak(gz, break_tag, gz2->continue_block, ZIR_REF_VOID_VALUE, (int32_t)node - (int32_t)gz->decl_node_index); @@ -4087,6 +4103,7 @@ static uint32_t forExpr( uint32_t cond_block = makeBlockInst(ag, block_tag, &loop_scope, node); setBlockBody(ag, &cond_scope, cond_block); loop_scope.break_block = loop_inst; + loop_scope.continue_block = cond_block; // AstGen.zig:6974 gzAppendInstruction(&loop_scope, cond_block); // Then branch: loop body (AstGen.zig:6982-7065).