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) {
11391139 LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
11401140 addLLVMFnAttr(fn_val, "nounwind");
11411141 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");
11451142 if (codegen_have_frame_pointer(g)) {
11461143 ZigLLVMAddFunctionAttr(fn_val, "no-frame-pointer-elim", "true");
11471144 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) {
20582055 LLVMSetFunctionCallConv(fn_val, get_llvm_cc(g, CallingConventionUnspecified));
20592056 addLLVMFnAttr(fn_val, "nounwind");
20602057 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");
20642058 addLLVMArgAttr(fn_val, (unsigned)0, "noalias");
20652059 addLLVMArgAttr(fn_val, (unsigned)0, "writeonly");
2066 // Error return trace memory is in the stack, which is impossible to be at address 0
2067 // on any architecture.
2060
20682061 addLLVMArgAttr(fn_val, (unsigned)1, "nonnull");
20692062 addLLVMArgAttr(fn_val, (unsigned)1, "noalias");
20702063 addLLVMArgAttr(fn_val, (unsigned)1, "readonly");
......@@ -5571,7 +5564,8 @@ static LLVMValueRef ir_render_await(CodeGen *g, IrExecutable *executable, IrInst
55715564 LLVMValueRef awaiter_ret_ptr_ptr = LLVMBuildStructGEP(g->builder, target_frame_ptr, coro_ret_start + 1, "");
55725565 if (result_loc == nullptr) {
55735566 // 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);
55755569 } else {
55765570 LLVMBuildStore(g->builder, result_loc, awaiter_ret_ptr_ptr);
55775571 }