| ... | @@ -1139,9 +1139,6 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) { | ... | @@ -1139,9 +1139,6 @@ static LLVMValueRef get_return_err_fn(CodeGen *g) { |
| 1139 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | 1139 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); |
| 1140 | addLLVMFnAttr(fn_val, "nounwind"); | 1140 | addLLVMFnAttr(fn_val, "nounwind"); |
| 1141 | add_uwtable_attr(g, fn_val); | 1141 | add_uwtable_attr(g, fn_val); |
| 1142 | // Error return trace memory is in the stack, which is impossible to be at address 0 | | |
| 1143 | // on any architecture. | | |
| 1144 | addLLVMArgAttr(fn_val, (unsigned)0, "nonnull"); | | |
| 1145 | if (codegen_have_frame_pointer(g)) { | 1142 | if (codegen_have_frame_pointer(g)) { |
| 1146 | ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true"); | 1143 | ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true"); |
| 1147 | ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr); | 1144 | ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim-non-leaf", nullptr); |
| ... | @@ -2058,13 +2055,9 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) { | ... | @@ -2058,13 +2055,9 @@ static LLVMValueRef get_merge_err_ret_traces_fn_val(CodeGen *g) { |
| 2058 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); | 2055 | LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified)); |
| 2059 | addLLVMFnAttr(fn_val, "nounwind"); | 2056 | addLLVMFnAttr(fn_val, "nounwind"); |
| 2060 | add_uwtable_attr(g, fn_val); | 2057 | add_uwtable_attr(g, fn_val); |
| 2061 | // Error return trace memory is in the stack, which is impossible to be at address 0 | | |
| 2062 | // on any architecture. | | |
| 2063 | addLLVMArgAttr(fn_val, (unsigned)0, "nonnull"); | | |
| 2064 | addLLVMArgAttr(fn_val, (unsigned)0, "noalias"); | 2058 | addLLVMArgAttr(fn_val, (unsigned)0, "noalias"); |
| 2065 | addLLVMArgAttr(fn_val, (unsigned)0, "writeonly"); | 2059 | addLLVMArgAttr(fn_val, (unsigned)0, "writeonly"); |
| 2066 | // Error return trace memory is in the stack, which is impossible to be at address 0 | 2060 | |
| 2067 | // on any architecture. | | |
| 2068 | addLLVMArgAttr(fn_val, (unsigned)1, "nonnull"); | 2061 | addLLVMArgAttr(fn_val, (unsigned)1, "nonnull"); |
| 2069 | addLLVMArgAttr(fn_val, (unsigned)1, "noalias"); | 2062 | addLLVMArgAttr(fn_val, (unsigned)1, "noalias"); |
| 2070 | addLLVMArgAttr(fn_val, (unsigned)1, "readonly"); | 2063 | addLLVMArgAttr(fn_val, (unsigned)1, "readonly"); |
| ... | @@ -5571,7 +5564,8 @@ static LLVMValueRef ir_render_await(CodeGen *g, IrExecutable *executable, IrInst | ... | @@ -5571,7 +5564,8 @@ static LLVMValueRef ir_render_await(CodeGen *g, IrExecutable *executable, IrInst |
| 5571 | LLVMValueRef awaiter_ret_ptr_ptr = LLVMBuildStructGEP(g->builder, target_frame_ptr, coro_ret_start + 1, ""); | 5564 | LLVMValueRef awaiter_ret_ptr_ptr = LLVMBuildStructGEP(g->builder, target_frame_ptr, coro_ret_start + 1, ""); |
| 5572 | if (result_loc == nullptr) { | 5565 | if (result_loc == nullptr) { |
| 5573 | // no copy needed | 5566 | // no copy needed |
| 5574 | LLVMBuildStore(g->builder, zero, awaiter_ret_ptr_ptr); | 5567 | LLVMBuildStore(g->builder, LLVMConstNull(LLVMGetElementType(LLVMTypeOf(awaiter_ret_ptr_ptr))), |
| | 5568 | awaiter_ret_ptr_ptr); |
| 5575 | } else { | 5569 | } else { |
| 5576 | LLVMBuildStore(g->builder, result_loc, awaiter_ret_ptr_ptr); | 5570 | LLVMBuildStore(g->builder, result_loc, awaiter_ret_ptr_ptr); |
| 5577 | } | 5571 | } |