diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-02-05 14:48:23 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-02-05 14:48:23 -0700 |
| commit | 2ee80858b42796c931fb2fe0b45e0ebb6f8ffb30 (patch) | |
| tree | ad0ca7cf585ebadc106bd31b21e543b4d43c981e /src | |
| parent | 54fbe7560ec0f3a9d5016f2058b07463767bf6e1 (diff) | |
| download | zig-2ee80858b42796c931fb2fe0b45e0ebb6f8ffb30.tar.gz zig-2ee80858b42796c931fb2fe0b45e0ebb6f8ffb30.zip | |
codegen: use gen_index for nonnull attribute
also put nonnull on sret params
closes #82
Diffstat (limited to 'src')
| -rw-r--r-- | src/codegen.cpp | 8 | ||||
| -rw-r--r-- | src/zig_llvm.hpp | 1 |
2 files changed, 3 insertions, 6 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp index 2965c8e593..d002c716ef 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -2876,6 +2876,7 @@ static void do_code_gen(CodeGen *g) { if (handle_is_ptr(fn_type->data.fn.fn_type_id.return_type)) { LLVMValueRef first_arg = LLVMGetParam(fn_table_entry->fn_value, 0); LLVMAddAttribute(first_arg, LLVMStructRetAttribute); + LLVMZigAddNonNullAttr(fn_table_entry->fn_value, 1); } // set parameter attributes @@ -2903,12 +2904,7 @@ static void do_code_gen(CodeGen *g) { LLVMAddAttribute(argument_val, LLVMReadOnlyAttribute); } if (param_type->id == TypeTableEntryIdPointer) { - // when https://github.com/andrewrk/zig/issues/82 is fixed, add - // non null attribute here - - ///`i` is arg index + 1 - ///I think that 0 is the return index, but it has a named LLVM constant variable - LLVMZigAddNonNullAttr(fn_table_entry->fn_value, param_decl_i + 1); + LLVMZigAddNonNullAttr(fn_table_entry->fn_value, gen_index + 1); } if (is_byval) { // TODO diff --git a/src/zig_llvm.hpp b/src/zig_llvm.hpp index d4e3548b70..aa50cddaa1 100644 --- a/src/zig_llvm.hpp +++ b/src/zig_llvm.hpp @@ -39,6 +39,7 @@ void LLVMZigOptimizeModule(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef LLVMValueRef LLVMZigBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args, unsigned NumArgs, unsigned CC, const char *Name); +// 0 is return value, 1 is first arg void LLVMZigAddNonNullAttr(LLVMValueRef fn, unsigned i); LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *pointee_type, |
