aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-03-20 14:21:44 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-11-17 10:04:37 +0100
commit91158ceb5f1c8dbe5a04691b3eb23ccf040eb1e2 (patch)
tree0f3114f78a05f187912d747a348707f51d15b4de
parent3065391a5fa46e507f88ffec3291311a2dee8e0e (diff)
downloadsparse-dev-91158ceb5f1c8dbe5a04691b3eb23ccf040eb1e2.tar.gz
llvm: add support for OP_SETVAL with labels
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--sparse-llvm.c3
-rw-r--r--validation/backend/label-as-value.c13
2 files changed, 16 insertions, 0 deletions
diff --git a/sparse-llvm.c b/sparse-llvm.c
index 83df9f83..e0c72006 100644
--- a/sparse-llvm.c
+++ b/sparse-llvm.c
@@ -867,6 +867,9 @@ static void output_op_setval(struct function *fn, struct instruction *insn)
case EXPR_FVALUE:
target = LLVMConstReal(dtype, val->fvalue);
break;
+ case EXPR_LABEL:
+ target = LLVMBlockAddress(fn->fn, val->symbol->bb_target->priv);
+ break;
default:
assert(0);
}
diff --git a/validation/backend/label-as-value.c b/validation/backend/label-as-value.c
new file mode 100644
index 00000000..6888c661
--- /dev/null
+++ b/validation/backend/label-as-value.c
@@ -0,0 +1,13 @@
+void *foo(void *def);
+void *foo(void *def)
+{
+ if (!def)
+yes: return &&yes;
+
+ return def;
+}
+
+/*
+ * check-name: label-as-value
+ * check-command: ./sparsec -c $file -o tmp.o
+ */