authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-11 22:05:09-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-08-11 22:05:09-04:00
log911b1a0428d106923a13aa28933957a88bb1bfb5
treee7898e3e8e05dee65665ea48fec5db9f937d2fba
parent62c5bc6058a64c411c49f84cdbd6994c24c91e00
signaturelock-open Commit is signed but in an unrecognized format.

fix no-longer-correct `nonnull` attribute on merge err ret traces fn


1 files changed, 3 insertions(+), 9 deletions(-)

src/codegen.cpp+3-9
...@@ -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 02060
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 needed5566 // 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 }