commit f587fa1cd73c3c0382e1bd2da2e24a7473421a2c (tree)
parent 7e1fcb55b3e96524ce6f5620e2e98a3e3cc56608
Author: Andrew Kelley <andrew@ziglang.org>
Date: Wed, 7 Aug 2019 10:56:19 -0400
clean up the bitcasting of awaiter fn ptr
Diffstat:
2 files changed, 1 insertion(+), 7 deletions(-)
diff --git a/BRANCH_TODO b/BRANCH_TODO
@@ -1,4 +1,3 @@
- * clean up the bitcasting of awaiter fn ptr
* compile error for error: expected anyframe->T, found 'anyframe'
* compile error for error: expected anyframe->T, found 'i32'
* await of a non async function
diff --git a/src/codegen.cpp b/src/codegen.cpp
@@ -2213,12 +2213,7 @@ static LLVMValueRef gen_resume(CodeGen *g, LLVMValueRef fn_val, LLVMValueRef tar
LLVMTypeRef usize_type_ref = g->builtin_types.entry_usize->llvm_type;
if (fn_val == nullptr) {
LLVMValueRef fn_ptr_ptr = LLVMBuildStructGEP(g->builder, target_frame_ptr, coro_fn_ptr_index, "");
- LLVMValueRef fn_val_typed = LLVMBuildLoad(g->builder, fn_ptr_ptr, "");
- LLVMValueRef as_int = LLVMBuildPtrToInt(g->builder, fn_val_typed, usize_type_ref, "");
- LLVMValueRef one = LLVMConstInt(usize_type_ref, 1, false);
- LLVMValueRef mask_val = LLVMConstNot(one);
- LLVMValueRef as_int_masked = LLVMBuildAnd(g->builder, as_int, mask_val, "");
- fn_val = LLVMBuildIntToPtr(g->builder, as_int_masked, LLVMTypeOf(fn_val_typed), "");
+ fn_val = LLVMBuildLoad(g->builder, fn_ptr_ptr, "");
}
if (arg_val == nullptr) {
arg_val = LLVMBuildSub(g->builder, LLVMConstAllOnes(usize_type_ref),