| ... | ... | @@ -1995,7 +1995,7 @@ static LLVMValueRef ir_render_return(CodeGen *g, IrExecutable *executable, IrIns |
| 1995 | 1995 | LLVMBuildStore(g->builder, new_resume_index, resume_index_ptr); |
| 1996 | 1996 | } |
| 1997 | 1997 | |
| 1998 | | LLVMBuildRet(g->builder, LLVMGetUndef(g->builtin_types.entry_usize->llvm_type)); |
| 1998 | LLVMBuildRetVoid(g->builder); |
| 1999 | 1999 | return nullptr; |
| 2000 | 2000 | } |
| 2001 | 2001 | if (want_first_arg_sret(g, &g->cur_fn->type_entry->data.fn.fn_type_id)) { |
| ... | ... | @@ -3438,7 +3438,7 @@ static LLVMValueRef ir_render_call(CodeGen *g, IrExecutable *executable, IrInstr |
| 3438 | 3438 | |
| 3439 | 3439 | LLVMValueRef call_inst = ZigLLVMBuildCall(g->builder, fn_val, &frame_result_loc, 1, llvm_cc, fn_inline, ""); |
| 3440 | 3440 | ZigLLVMSetTailCall(call_inst); |
| 3441 | | LLVMBuildRet(g->builder, call_inst); |
| 3441 | LLVMBuildRetVoid(g->builder); |
| 3442 | 3442 | |
| 3443 | 3443 | LLVMPositionBuilderAtEnd(g->builder, instruction->resume_block->llvm_block); |
| 3444 | 3444 | return nullptr; |
| ... | ... | @@ -4898,7 +4898,7 @@ static LLVMValueRef ir_render_suspend_begin(CodeGen *g, IrExecutable *executable |
| 4898 | 4898 | static LLVMValueRef ir_render_suspend_br(CodeGen *g, IrExecutable *executable, |
| 4899 | 4899 | IrInstructionSuspendBr *instruction) |
| 4900 | 4900 | { |
| 4901 | | LLVMBuildRet(g->builder, LLVMGetUndef(g->builtin_types.entry_usize->llvm_type)); |
| 4901 | LLVMBuildRetVoid(g->builder); |
| 4902 | 4902 | return nullptr; |
| 4903 | 4903 | } |
| 4904 | 4904 | |
| ... | ... | @@ -6426,27 +6426,17 @@ static void do_code_gen(CodeGen *g) { |
| 6426 | 6426 | LLVMPositionBuilderAtEnd(g->builder, bad_resume_block); |
| 6427 | 6427 | gen_assertion_scope(g, PanicMsgIdBadResume, fn_table_entry->child_scope); |
| 6428 | 6428 | |
| 6429 | | LLVMBasicBlockRef get_size_block = LLVMAppendBasicBlock(g->cur_fn_val, "GetSize"); |
| 6430 | | LLVMPositionBuilderAtEnd(g->builder, get_size_block); |
| 6431 | | assert(fn_table_entry->frame_type->abi_size != 0); |
| 6432 | | assert(fn_table_entry->frame_type->abi_size != SIZE_MAX); |
| 6433 | | LLVMBuildRet(g->builder, size_val); |
| 6434 | | |
| 6435 | 6429 | LLVMPositionBuilderAtEnd(g->builder, fn_table_entry->preamble_llvm_block); |
| 6436 | 6430 | LLVMValueRef resume_index_ptr = LLVMBuildStructGEP(g->builder, g->cur_ret_ptr, |
| 6437 | 6431 | coro_resume_index_index, ""); |
| 6438 | 6432 | LLVMValueRef resume_index = LLVMBuildLoad(g->builder, resume_index_ptr, ""); |
| 6439 | 6433 | // +1 - index 0 is reserved for the entry block |
| 6440 | | // +1 - index 1 is reserved for getting the size. |
| 6441 | 6434 | LLVMValueRef switch_instr = LLVMBuildSwitch(g->builder, resume_index, bad_resume_block, |
| 6442 | | fn_table_entry->resume_blocks.length + 2); |
| 6435 | fn_table_entry->resume_blocks.length + 1); |
| 6443 | 6436 | |
| 6444 | 6437 | LLVMValueRef zero = LLVMConstNull(usize_type_ref); |
| 6445 | 6438 | LLVMAddCase(switch_instr, zero, executable->basic_block_list.at(0)->llvm_block); |
| 6446 | 6439 | |
| 6447 | | LLVMValueRef one = LLVMConstInt(usize_type_ref, 1, false); |
| 6448 | | LLVMAddCase(switch_instr, one, get_size_block); |
| 6449 | | |
| 6450 | 6440 | for (size_t resume_i = 0; resume_i < fn_table_entry->resume_blocks.length; resume_i += 1) { |
| 6451 | 6441 | IrBasicBlock *resume_block = fn_table_entry->resume_blocks.at(resume_i); |
| 6452 | 6442 | LLVMValueRef case_value = LLVMConstInt(usize_type_ref, resume_block->resume_index, false); |