aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/linear
diff options
Diffstat (limited to 'validation/linear')
-rw-r--r--validation/linear/builtin_unreachable.c31
-rw-r--r--validation/linear/cast-volatile.c14
-rw-r--r--validation/linear/inline-return.c24
-rw-r--r--validation/linear/stray-phisrc.c25
4 files changed, 94 insertions, 0 deletions
diff --git a/validation/linear/builtin_unreachable.c b/validation/linear/builtin_unreachable.c
new file mode 100644
index 00000000..4f13b892
--- /dev/null
+++ b/validation/linear/builtin_unreachable.c
@@ -0,0 +1,31 @@
+void function_that_never_returns(void);
+
+int foo(int c)
+{
+ if (c)
+ return 1;
+ function_that_never_returns();
+ __builtin_unreachable();
+}
+
+/*
+ * check-name: __builtin_unreachable()
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-known-to-fail
+ * check-output-start
+foo:
+.L0:
+ <entry-point>
+ cbr %arg1, .L3, .L2
+
+.L2:
+ call function_that_never_returns
+ unreach
+
+.L3:
+ ret.32 $1
+
+
+ * check-output-end
+ */
diff --git a/validation/linear/cast-volatile.c b/validation/linear/cast-volatile.c
new file mode 100644
index 00000000..f8a64937
--- /dev/null
+++ b/validation/linear/cast-volatile.c
@@ -0,0 +1,14 @@
+static int foo(volatile int *a, int v)
+{
+ *a = v;
+ return *a;
+}
+
+/*
+ * check-name: cast-volatile
+ * check-command: test-linearize -fdump-ir=linearize $file
+ *
+ * check-known-to-fail
+ * check-output-ignore
+ * check-output-excludes: scast\\.
+ */
diff --git a/validation/linear/inline-return.c b/validation/linear/inline-return.c
new file mode 100644
index 00000000..b1e4d844
--- /dev/null
+++ b/validation/linear/inline-return.c
@@ -0,0 +1,24 @@
+static inline int def(void)
+{
+ return 1;
+}
+
+int foo(void)
+{
+ return def();
+}
+
+int bar(void)
+{
+ return def();
+ return 0;
+}
+
+/*
+ * check-name: inline-return.c
+ * check-command: test-linearize -fdump-ir=linearize -Wno-decl $file
+ *
+ * check-output-ignore
+ * check-output-contains: ret\\..*\\$1
+ * check-output-excludes: ret\\..*\\$0
+ */
diff --git a/validation/linear/stray-phisrc.c b/validation/linear/stray-phisrc.c
new file mode 100644
index 00000000..e9f35c89
--- /dev/null
+++ b/validation/linear/stray-phisrc.c
@@ -0,0 +1,25 @@
+static int foo(int **g)
+{
+ int i = 1;
+ int *a[2];
+ int **p;
+
+ a[1] = &i;
+ if (g)
+ p = g;
+ else
+ p = &a[0];
+ p += 1; // will point to a[1] = &i
+ if (!g)
+ **p = 0;
+ return i;
+}
+
+/*
+ * check-name: stray phisrc
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-ignore
+ * check-output-excludes: phisrc\\.
+ */