aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2019-02-17 13:39:02 -0800
committerMichael Forney <mforney@mforney.org>2019-02-17 13:45:07 -0800
commited176e4211b27218b9182ead05a13fd6d27d46ac (patch)
treed1f9ae26cfb21d6fdc39ab5a05a28b715170ca56 /tests
parentfed14a31ca554b54c4f2eebefd09aeaeda782aba (diff)
downloadcproc-ed176e4211b27218b9182ead05a13fd6d27d46ac.tar.xz
Fix returning struct/union types
Diffstat (limited to 'tests')
-rw-r--r--tests/struct-return-1.c3
-rw-r--r--tests/struct-return-1.qbe10
-rw-r--r--tests/struct-return-2.c4
-rw-r--r--tests/struct-return-2.qbe8
4 files changed, 25 insertions, 0 deletions
diff --git a/tests/struct-return-1.c b/tests/struct-return-1.c
new file mode 100644
index 0000000..e1631a8
--- /dev/null
+++ b/tests/struct-return-1.c
@@ -0,0 +1,3 @@
+struct s {int x;} f(void) {
+ return (struct s){2};
+}
diff --git a/tests/struct-return-1.qbe b/tests/struct-return-1.qbe
new file mode 100644
index 0000000..fcdf699
--- /dev/null
+++ b/tests/struct-return-1.qbe
@@ -0,0 +1,10 @@
+type :s.1 = { w, }
+export
+function :s.1 $f() {
+@start.1
+ %.1 =l alloc4 4
+@body.2
+ %.2 =l add %.1, 0
+ storew 2, %.2
+ ret %.1
+}
diff --git a/tests/struct-return-2.c b/tests/struct-return-2.c
new file mode 100644
index 0000000..9fa50f5
--- /dev/null
+++ b/tests/struct-return-2.c
@@ -0,0 +1,4 @@
+struct s {int x;} g(void);
+void f(void) {
+ g();
+}
diff --git a/tests/struct-return-2.qbe b/tests/struct-return-2.qbe
new file mode 100644
index 0000000..2f1d3da
--- /dev/null
+++ b/tests/struct-return-2.qbe
@@ -0,0 +1,8 @@
+type :s.1 = { w, }
+export
+function $f() {
+@start.1
+@body.2
+ %.1 =:s.1 call $g()
+ ret
+}