aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-03-18 16:30:18 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-03-20 00:52:28 +0100
commit0095a95a31bb0acd57ce91b55c53a5d95de775d2 (patch)
tree5a8e8bea9b578e8f9a3a34af33ba9f922bc32bb1
parent0558317d0c7a2e20a6d82b7ef35357ec02e2ad38 (diff)
downloadsparse-0095a95a31bb0acd57ce91b55c53a5d95de775d2.tar.gz
add testcases for OP_UNREACH
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--validation/context-unreachable.c16
-rw-r--r--validation/linear/builtin_unreachable0.c28
-rw-r--r--validation/linear/builtin_unreachable1.c (renamed from validation/linear/builtin_unreachable.c)14
-rw-r--r--validation/linear/noreturn-unreachable0.c23
4 files changed, 74 insertions, 7 deletions
diff --git a/validation/context-unreachable.c b/validation/context-unreachable.c
new file mode 100644
index 00000000..3e330403
--- /dev/null
+++ b/validation/context-unreachable.c
@@ -0,0 +1,16 @@
+int fun(void);
+
+static void foo(void)
+{
+ __context__(1);
+ if (!fun()) {
+ __builtin_unreachable();
+ return;
+ }
+ __context__(-1);
+}
+
+/*
+ * check-name: context-unreachable
+ * check-known-to-fail
+ */
diff --git a/validation/linear/builtin_unreachable0.c b/validation/linear/builtin_unreachable0.c
new file mode 100644
index 00000000..f9703079
--- /dev/null
+++ b/validation/linear/builtin_unreachable0.c
@@ -0,0 +1,28 @@
+int foo(int p)
+{
+ if (p == 3)
+ __builtin_unreachable();
+ return p;
+}
+
+/*
+ * check-name: builtin_unreachable0
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-start
+foo:
+.L0:
+ <entry-point>
+ seteq.32 %r2 <- %arg1, $3
+ cbr %r2, .L1, .L3
+
+.L1:
+ unreachable
+
+.L3:
+ ret.32 %arg1
+
+
+ * check-output-end
+ */
diff --git a/validation/linear/builtin_unreachable.c b/validation/linear/builtin_unreachable1.c
index 4f13b892..4dedfaba 100644
--- a/validation/linear/builtin_unreachable.c
+++ b/validation/linear/builtin_unreachable1.c
@@ -1,15 +1,15 @@
-void function_that_never_returns(void);
+void die(void);
int foo(int c)
{
if (c)
return 1;
- function_that_never_returns();
+ die();
__builtin_unreachable();
}
/*
- * check-name: __builtin_unreachable()
+ * check-name: builtin_unreachable1
* check-command: test-linearize -Wno-decl $file
*
* check-known-to-fail
@@ -19,13 +19,13 @@ foo:
<entry-point>
cbr %arg1, .L3, .L2
-.L2:
- call function_that_never_returns
- unreach
-
.L3:
ret.32 $1
+.L2:
+ call die
+ unreachable
+
* check-output-end
*/
diff --git a/validation/linear/noreturn-unreachable0.c b/validation/linear/noreturn-unreachable0.c
new file mode 100644
index 00000000..47bd6aa3
--- /dev/null
+++ b/validation/linear/noreturn-unreachable0.c
@@ -0,0 +1,23 @@
+extern void die(void) __attribute__((noreturn));
+
+int foo(void)
+{
+ die();
+ return 0;
+}
+
+/*
+ * check-name: noreturn-unreachable0
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-start
+foo:
+.L0:
+ <entry-point>
+ call die
+ unreachable
+
+
+ * check-output-end
+ */