diff options
| -rw-r--r-- | sparse-llvm.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c index b1ceb614..6c2d0176 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -415,10 +415,19 @@ static LLVMValueRef value_to_ivalue(struct function *fn, LLVMValueRef val) static LLVMValueRef value_to_pvalue(struct function *fn, struct symbol *ctype, LLVMValueRef val) { - if (LLVMGetTypeKind(LLVMTypeOf(val)) == LLVMIntegerTypeKind) { - LLVMTypeRef dtype = symbol_type(ctype); - const char *name = LLVMGetValueName(val); + const char *name = LLVMGetValueName(val); + LLVMTypeRef dtype = symbol_type(ctype); + + assert(is_ptr_type(ctype)); + switch (LLVMGetTypeKind(LLVMTypeOf(val))) { + case LLVMIntegerTypeKind: val = LLVMBuildIntToPtr(fn->builder, val, dtype, name); + break; + case LLVMPointerTypeKind: + val = LLVMBuildBitCast(fn->builder, val, dtype, name); + break; + default: + break; } return val; } |
