aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorJonathan Neuschäfer <j.neuschaefer@gmx.net>2012-10-10 01:34:36 +0200
committerPekka Enberg <penberg@kernel.org>2012-10-10 09:33:41 +0300
commitd5bd3662e07343fbd82c05606f4c25951062d1bb (patch)
tree04aed095ffd3e6c288d2c29d38faab40941fa1bc
parente03a53b13e76c8049406eca28c843da33d3e394d (diff)
downloadsparse-dev-d5bd3662e07343fbd82c05606f4c25951062d1bb.tar.gz
sparse, llvm: Fix type of loaded values
Instead of making the computed address a pointer to an int type large enough to hold a pointer, make it a pointer to the memory object being loaded. This fixes another LLVM warning. Cc: Pekka Enberg <penberg@kernel.org> Cc: Christopher Li <sparse@chrisli.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Acked-by: Jeff Garzik <jgarzik@redhat.com> Signed-off-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net> Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r--sparse-llvm.c2
-rw-r--r--validation/backend/load-type.c12
2 files changed, 13 insertions, 1 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c
index e4929e9b..6f2fbd69 100644
--- a/sparse-llvm.c
+++ b/sparse-llvm.c
@@ -615,7 +615,7 @@ static void output_op_load(struct function *fn, struct instruction *insn)
/* convert address back to pointer */
addr = LLVMBuildIntToPtr(fn->builder, addr_i,
- LLVMPointerType(int_type, 0), "addr");
+ LLVMTypeOf(src_p), "addr");
/* perform load */
target = LLVMBuildLoad(fn->builder, addr, "load_target");
diff --git a/validation/backend/load-type.c b/validation/backend/load-type.c
new file mode 100644
index 00000000..80416cad
--- /dev/null
+++ b/validation/backend/load-type.c
@@ -0,0 +1,12 @@
+extern struct _IO_FILE *stdin;
+
+static void sub(struct _IO_FILE *in) {}
+
+static void test(void) {
+ sub(stdin);
+}
+
+/*
+ * check-name: Type of loaded objects
+ * check-command: ./sparsec -c $file -o tmp.o
+ */