authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-02-05 14:48:23-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-02-05 14:48:23-07:00
log2ee80858b42796c931fb2fe0b45e0ebb6f8ffb30
treead0ca7cf585ebadc106bd31b21e543b4d43c981e
parent54fbe7560ec0f3a9d5016f2058b07463767bf6e1

codegen: use gen_index for nonnull attribute

also put nonnull on sret params closes #82

2 files changed, 3 insertions(+), 6 deletions(-)

src/codegen.cpp+2-6
......@@ -2876,6 +2876,7 @@ static void do_code_gen(CodeGen *g) {
28762876 if (handle_is_ptr(fn_type->data.fn.fn_type_id.return_type)) {
28772877 LLVMValueRef first_arg = LLVMGetParam(fn_table_entry->fn_value, 0);
28782878 LLVMAddAttribute(first_arg, LLVMStructRetAttribute);
2879 LLVMZigAddNonNullAttr(fn_table_entry->fn_value, 1);
28792880 }
28802881
28812882 // set parameter attributes
......@@ -2903,12 +2904,7 @@ static void do_code_gen(CodeGen *g) {
29032904 LLVMAddAttribute(argument_val, LLVMReadOnlyAttribute);
29042905 }
29052906 if (param_type->id == TypeTableEntryIdPointer) {
2906 // when https://github.com/andrewrk/zig/issues/82 is fixed, add
2907 // non null attribute here
2908
2909 ///`i` is arg index + 1
2910 ///I think that 0 is the return index, but it has a named LLVM constant variable
2911 LLVMZigAddNonNullAttr(fn_table_entry->fn_value, param_decl_i + 1);
2907 LLVMZigAddNonNullAttr(fn_table_entry->fn_value, gen_index + 1);
29122908 }
29132909 if (is_byval) {
29142910 // TODO
src/zig_llvm.hpp+1
......@@ -39,6 +39,7 @@ void LLVMZigOptimizeModule(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef
3939LLVMValueRef LLVMZigBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args,
4040 unsigned NumArgs, unsigned CC, const char *Name);
4141
42// 0 is return value, 1 is first arg
4243void LLVMZigAddNonNullAttr(LLVMValueRef fn, unsigned i);
4344
4445LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *pointee_type,