diff options
| -rw-r--r-- | sparse-llvm.c | 14 | ||||
| -rw-r--r-- | validation/backend/degenerate-ptr.c | 1 | ||||
| -rw-r--r-- | validation/backend/function-ptr.c | 1 | ||||
| -rw-r--r-- | validation/backend/pointer-param.c | 1 | ||||
| -rw-r--r-- | validation/backend/symaddr.c | 1 |
5 files changed, 12 insertions, 6 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c index 08f055a9..0043b797 100644 --- a/sparse-llvm.c +++ b/sparse-llvm.c @@ -403,6 +403,16 @@ static LLVMValueRef pseudo_to_value(struct function *fn, struct symbol *ctype, p return result; } +static LLVMValueRef pseudo_to_rvalue(struct function *fn, struct symbol *ctype, pseudo_t pseudo) +{ + LLVMValueRef val = pseudo_to_value(fn, ctype, pseudo); + LLVMTypeRef dtype = symbol_type(ctype); + char name[MAX_PSEUDO_NAME]; + + pseudo_name(pseudo, name); + return LLVMBuildBitCast(fn->builder, val, dtype, name); +} + static LLVMValueRef value_to_ivalue(struct function *fn, struct symbol *ctype, LLVMValueRef val) { const char *name = LLVMGetValueName(val); @@ -712,7 +722,7 @@ static void output_op_store(struct function *fn, struct instruction *insn) addr = calc_memop_addr(fn, insn); - target_in = pseudo_to_value(fn, insn->type, insn->target); + target_in = pseudo_to_rvalue(fn, insn->type, insn->target); /* perform store */ LLVMBuildStore(fn->builder, target_in, addr); @@ -800,7 +810,7 @@ static void output_op_call(struct function *fn, struct instruction *insn) i = 0; FOR_EACH_PTR(insn->arguments, arg) { NEXT_PTR_LIST(ctype); - args[i++] = pseudo_to_value(fn, ctype, arg); + args[i++] = pseudo_to_rvalue(fn, ctype, arg); } END_FOR_EACH_PTR(arg); FINISH_PTR_LIST(ctype); diff --git a/validation/backend/degenerate-ptr.c b/validation/backend/degenerate-ptr.c index 5e71d0d8..8de979e0 100644 --- a/validation/backend/degenerate-ptr.c +++ b/validation/backend/degenerate-ptr.c @@ -69,5 +69,4 @@ void global(void) /* * check-name: degenerated pointer handling * check-command: ./sparsec -c $file -o tmp.o - * check-known-to-fail */ diff --git a/validation/backend/function-ptr.c b/validation/backend/function-ptr.c index dbf3cab3..4fac9dc2 100644 --- a/validation/backend/function-ptr.c +++ b/validation/backend/function-ptr.c @@ -150,5 +150,4 @@ void ops(int a, int *p, struct ops *ops) /* * check-name: Function pointer code generation * check-command: sparsec -c $file -o tmp.o - * check-known-to-fail */ diff --git a/validation/backend/pointer-param.c b/validation/backend/pointer-param.c index 745d069f..b705e6f4 100644 --- a/validation/backend/pointer-param.c +++ b/validation/backend/pointer-param.c @@ -39,5 +39,4 @@ void foo(int *p, int a[5], int (*pfun)(int)) /* * check-name: pointer-param * check-command: ./sparsec -c $file -o tmp.o - * check-known-to-fail */ diff --git a/validation/backend/symaddr.c b/validation/backend/symaddr.c index 8b450111..71fb9def 100644 --- a/validation/backend/symaddr.c +++ b/validation/backend/symaddr.c @@ -67,5 +67,4 @@ void gfoo(int *p, int a) /* * check-name: symbol address * check-command: ./sparsec -Wno-decl -c $file -o tmp.o - * check-known-to-fail */ |
