aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2017-01-29 11:48:06 +0100
committerChristopher Li <sparse@chrisli.org>2017-02-13 09:34:45 +0800
commitd3bf74f5f13702fc758d442894ad034e55328062 (patch)
tree0bc2a489c72f440336ffc53d9693d1c50518fb4f /validation
parent61c406241c5d1a8da3f829e51e18f20b77f25926 (diff)
downloadsparse-dev-d3bf74f5f13702fc758d442894ad034e55328062.tar.gz
fix killing OP_COMPUTEDGOTO
Currently kill_instruction() doesn't do anything with the operands of computed gotos (OP_COMPUTEDGOTO). But when these instructions are removed we must also remove the operands 'usage'. Without this some instructions, which provides the select's operands, are not optimized away as expected. The fix consists by killing it's operand much like what is done for conditional branches. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com> Signed-off-by: Christopher Li <sparse@chrisli.org>
Diffstat (limited to 'validation')
-rw-r--r--validation/kill-computedgoto.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/validation/kill-computedgoto.c b/validation/kill-computedgoto.c
new file mode 100644
index 00000000..3b3ed8ff
--- /dev/null
+++ b/validation/kill-computedgoto.c
@@ -0,0 +1,17 @@
+void foo(int a);
+void foo(int a)
+{
+ void *l = &&end + 3;
+
+end:
+ if (a * 0)
+ goto *l;
+}
+
+/*
+ * check-name: kill-computedgoto
+ * check-command: test-linearize $file
+ *
+ * check-output-ignore
+ * check-output-excludes: add\\.
+ */