aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/regression/Makefile2
-rw-r--r--test/regression/Results/bitfields910
-rw-r--r--test/regression/bitfields9.c49
3 files changed, 60 insertions, 1 deletions
diff --git a/test/regression/Makefile b/test/regression/Makefile
index 1ffe586c..94c212d2 100644
--- a/test/regression/Makefile
+++ b/test/regression/Makefile
@@ -17,7 +17,7 @@ TESTS=int32 int64 floats floats-basics \
volatile1 volatile2 volatile3 \
funct3 expr5 struct7 struct8 struct11 casts1 casts2 char1 \
sizeof1 sizeof2 binops bool for1 switch switch2 compound \
- decl1 interop1
+ decl1 interop1 bitfields9
# Can run, but only in compiled mode, and have reference output in Results
diff --git a/test/regression/Results/bitfields9 b/test/regression/Results/bitfields9
new file mode 100644
index 00000000..ca74f1f4
--- /dev/null
+++ b/test/regression/Results/bitfields9
@@ -0,0 +1,10 @@
+glob_s = { a = -12, b = 1 }
+glob_t = { c = 123, d = 0, e = -45 }
+loc_s = { a = 11, b = 2 }
+loc_t = { c = 11, d = 1, e = 2 }
+compound_s = { a = 2, b = 3 }
+compound_t = { c = 2, d = 0, e = -11 }
+loc_s = { a = 7, b = 2 }
+loc_t = { c = 7, d = 1, e = 50 }
+compound_s = { a = -14, b = 3 }
+compound_t = { c = 50, d = 0, e = -7 }
diff --git a/test/regression/bitfields9.c b/test/regression/bitfields9.c
new file mode 100644
index 00000000..b33c4064
--- /dev/null
+++ b/test/regression/bitfields9.c
@@ -0,0 +1,49 @@
+#include <stdio.h>
+
+/* Initialization of bit-fields */
+
+struct s {
+ signed char a: 6;
+ unsigned int b: 2;
+};
+
+struct t {
+ unsigned int c: 16;
+ unsigned int d: 1;
+ short e: 8;
+};
+
+void print_s(char * msg, struct s p)
+{
+ printf("%s = { a = %d, b = %d }\n", msg, p.a, p.b);
+}
+
+void print_t(char * msg, struct t p)
+{
+ printf("%s = { c = %d, d = %d, e = %d }\n", msg, p.c, p.d, p.e);
+}
+
+/* Global initialization */
+struct s glob_s = { -12, 1 };
+struct t glob_t = { 123, 0, -45 };
+
+/* Local initialization */
+void f(int x, int y)
+{
+ struct s loc_s = { x, y };
+ struct t loc_t = { x, 1, y };
+ print_s("loc_s", loc_s);
+ print_t("loc_t", loc_t);
+ print_s("compound_s", (struct s) { y, x });
+ print_t("compound_t", (struct t) { y, 0, -x });
+}
+
+int main()
+{
+ print_s("glob_s", glob_s);
+ print_t("glob_t", glob_t);
+ f(11, 2);
+ f(7, 50);
+ return 0;
+}
+