From b04bb783badb9051c62b26fb1858f916d0e4ccd0 Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Tue, 28 Apr 2015 11:21:59 +0200 Subject: Extended inline asm: handle missing cases. Bitfields: better translation of initializers and compound literals; run this pass before unblocking. Transform.stmt: extend with ability to treat unblocked code. test/regression: more bitfield tests. --- test/regression/Results/bitfields9 | 10 ++++++++ test/regression/bitfields9.c | 49 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 test/regression/Results/bitfields9 create mode 100644 test/regression/bitfields9.c (limited to 'test') 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 + +/* 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; +} + -- cgit