| author | |
| committer | |
| log | 54fbe7560ec0f3a9d5016f2058b07463767bf6e1 |
| tree | 5c76ac86048834ec9dca4144dc4e651c51b01c03 |
| parent | ff5673ae1b74b8ad59ee23921e0bb4e25349d10f |
3 files changed, 15 insertions(+), 0 deletions(-)
src/codegen.cpp+4| ... | ... | @@ -2905,6 +2905,10 @@ static void do_code_gen(CodeGen *g) { |
| 2905 | 2905 | if (param_type->id == TypeTableEntryIdPointer) { |
| 2906 | 2906 | // when https://github.com/andrewrk/zig/issues/82 is fixed, add |
| 2907 | 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); | |
| 2908 | 2912 | } |
| 2909 | 2913 | if (is_byval) { |
| 2910 | 2914 | // TODO |
src/zig_llvm.cpp+10| ... | ... | @@ -140,6 +140,16 @@ LLVMValueRef LLVMZigBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *A |
| 140 | 140 | return wrap(unwrap(B)->Insert(call_inst)); |
| 141 | 141 | } |
| 142 | 142 | |
| 143 | void LLVMZigAddNonNullAttr(LLVMValueRef fn, unsigned i) | |
| 144 | { | |
| 145 | assert( isa<Function>(unwrap(fn)) ); | |
| 146 | ||
| 147 | Function *unwrapped_function = reinterpret_cast<Function*>(unwrap(fn)); | |
| 148 | ||
| 149 | unwrapped_function->addAttribute(i, Attribute::NonNull); | |
| 150 | } | |
| 151 | ||
| 152 | ||
| 143 | 153 | LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *pointee_type, |
| 144 | 154 | uint64_t size_in_bits, uint64_t align_in_bits, const char *name) |
| 145 | 155 | { |
src/zig_llvm.hpp+1| ... | ... | @@ -39,6 +39,7 @@ void LLVMZigOptimizeModule(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef |
| 39 | 39 | LLVMValueRef LLVMZigBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args, |
| 40 | 40 | unsigned NumArgs, unsigned CC, const char *Name); |
| 41 | 41 | |
| 42 | void LLVMZigAddNonNullAttr(LLVMValueRef fn, unsigned i); | |
| 42 | 43 | |
| 43 | 44 | LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *pointee_type, |
| 44 | 45 | uint64_t size_in_bits, uint64_t align_in_bits, const char *name); |