authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-07 10:56:19-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-07 10:56:19-04:00
logf587fa1cd73c3c0382e1bd2da2e24a7473421a2c
treeee4b42df791f986d0de4ce82be67354f760aa243
parent7e1fcb55b3e96524ce6f5620e2e98a3e3cc56608
signature Commit is signed but in an unrecognized format.

clean up the bitcasting of awaiter fn ptr


2 files changed, 1 insertions(+), 7 deletions(-)

BRANCH_TODO-1
......@@ -1,4 +1,3 @@
1 * clean up the bitcasting of awaiter fn ptr
21 * compile error for error: expected anyframe->T, found 'anyframe'
32 * compile error for error: expected anyframe->T, found 'i32'
43 * await of a non async function
src/codegen.cpp+1-6
......@@ -2213,12 +2213,7 @@ static LLVMValueRef gen_resume(CodeGen *g, LLVMValueRef fn_val, LLVMValueRef tar
22132213 LLVMTypeRef usize_type_ref = g->builtin_types.entry_usize->llvm_type;
22142214 if (fn_val == nullptr) {
22152215 LLVMValueRef fn_ptr_ptr = LLVMBuildStructGEP(g->builder, target_frame_ptr, coro_fn_ptr_index, "");
2216 LLVMValueRef fn_val_typed = LLVMBuildLoad(g->builder, fn_ptr_ptr, "");
2217 LLVMValueRef as_int = LLVMBuildPtrToInt(g->builder, fn_val_typed, usize_type_ref, "");
2218 LLVMValueRef one = LLVMConstInt(usize_type_ref, 1, false);
2219 LLVMValueRef mask_val = LLVMConstNot(one);
2220 LLVMValueRef as_int_masked = LLVMBuildAnd(g->builder, as_int, mask_val, "");
2221 fn_val = LLVMBuildIntToPtr(g->builder, as_int_masked, LLVMTypeOf(fn_val_typed), "");
2216 fn_val = LLVMBuildLoad(g->builder, fn_ptr_ptr, "");
22222217 }
22232218 if (arg_val == nullptr) {
22242219 arg_val = LLVMBuildSub(g->builder, LLVMConstAllOnes(usize_type_ref),