| 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,6 +2905,10 @@ static void do_code_gen(CodeGen *g) { |
| 2905 | if (param_type->id == TypeTableEntryIdPointer) { | 2905 | if (param_type->id == TypeTableEntryIdPointer) { |
| 2906 | // when https://github.com/andrewrk/zig/issues/82 is fixed, add | 2906 | // when https://github.com/andrewrk/zig/issues/82 is fixed, add |
| 2907 | // non null attribute here | 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 | if (is_byval) { | 2913 | if (is_byval) { |
| 2910 | // TODO | 2914 | // TODO |
src/zig_llvm.cpp+10| ... | @@ -140,6 +140,16 @@ LLVMValueRef LLVMZigBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *A | ... | @@ -140,6 +140,16 @@ LLVMValueRef LLVMZigBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *A |
| 140 | return wrap(unwrap(B)->Insert(call_inst)); | 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 | LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *pointee_type, | 153 | LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *pointee_type, |
| 144 | uint64_t size_in_bits, uint64_t align_in_bits, const char *name) | 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,6 +39,7 @@ void LLVMZigOptimizeModule(LLVMTargetMachineRef targ_machine_ref, LLVMModuleRef |
| 39 | LLVMValueRef LLVMZigBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args, | 39 | LLVMValueRef LLVMZigBuildCall(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args, |
| 40 | unsigned NumArgs, unsigned CC, const char *Name); | 40 | unsigned NumArgs, unsigned CC, const char *Name); |
| 41 | 41 | ||
| 42 | void LLVMZigAddNonNullAttr(LLVMValueRef fn, unsigned i); | ||
| 42 | 43 | ||
| 43 | LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *pointee_type, | 44 | LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZigDIType *pointee_type, |
| 44 | uint64_t size_in_bits, uint64_t align_in_bits, const char *name); | 45 | uint64_t size_in_bits, uint64_t align_in_bits, const char *name); |