aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/linear
diff options
Diffstat (limited to 'validation/linear')
-rw-r--r--validation/linear/bitfield-expand-deref.c27
-rw-r--r--validation/linear/degen-function.c13
2 files changed, 40 insertions, 0 deletions
diff --git a/validation/linear/bitfield-expand-deref.c b/validation/linear/bitfield-expand-deref.c
new file mode 100644
index 00000000..7748725f
--- /dev/null
+++ b/validation/linear/bitfield-expand-deref.c
@@ -0,0 +1,27 @@
+struct s {
+ int a:8;
+ int b:8;
+};
+
+int foo(void)
+{
+ struct s x = { .a = 12, .b = 34, };
+
+ return x.b;
+}
+
+int bar(int a)
+{
+ struct s x = { .a = 12, .b = a, };
+
+ return x.b;
+}
+
+/*
+ * check-name: bitfield expand deref
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-ignore
+ * check-output-excludes: ret\..*\$12
+ * check-output-contains: ret\..*\$34
+ */
diff --git a/validation/linear/degen-function.c b/validation/linear/degen-function.c
index 6dd3123b..4fb2d564 100644
--- a/validation/linear/degen-function.c
+++ b/validation/linear/degen-function.c
@@ -4,6 +4,7 @@ typedef int (*fun_t)(int);
fun_t fa(void) { return &fun; }
fun_t f0(void) { return fun; }
+fun_t f1(void) { return *fun; }
/*
* check-name: degen-function
@@ -34,5 +35,17 @@ f0:
ret.64 %r3
+f1:
+.L4:
+ <entry-point>
+ symaddr.64 %r5 <- fun
+ phisrc.64 %phi3(return) <- %r5
+ br .L5
+
+.L5:
+ phi.64 %r6 <- %phi3(return)
+ ret.64 %r5
+
+
* check-output-end
*/