diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/regression/tests/bug2817646.c | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/regression/tests/bug2817646.c')
| -rw-r--r-- | support/regression/tests/bug2817646.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/support/regression/tests/bug2817646.c b/support/regression/tests/bug2817646.c new file mode 100644 index 0000000..68733ab --- /dev/null +++ b/support/regression/tests/bug2817646.c @@ -0,0 +1,88 @@ +/* bug2817646.c + * Structure order error + */ + +#include <testfwk.h> +#include <stddef.h> + +typedef struct dlnode_good { + struct dlnode_good __xdata * nxt; + struct dlnode_good __xdata * prv; +} dlnode_good; + +typedef dlnode_good __xdata * dlist_good; + +__xdata dlnode_good good = { &good, NULL }; +__xdata dlist_good gl = &good; + +dlnode_good __xdata * +f0 (const dlist_good * obj) +{ + return (*obj) ? (*obj)->nxt : 0; +} + +dlnode_good __xdata * +f1 (__xdata dlist_good * obj) +{ + return (*obj) ? (*obj)->nxt : 0; +} + +dlnode_good __xdata * +f2 (dlnode_good __xdata * const * obj) +{ + return (*obj) ? (*obj)->nxt : 0; +} + +dlnode_good __xdata * +f3 (dlnode_good __xdata * __xdata * obj) +{ + return (*obj) ? (*obj)->nxt : 0; +} + +typedef struct dlnode_bad { + struct dlnode_bad __xdata * prv; + struct dlnode_bad __xdata * nxt; +} dlnode_bad; + +typedef dlnode_bad __xdata * dlist_bad; + +__xdata dlnode_bad bad = { NULL, &bad }; +__xdata dlist_bad bl = &bad; + +dlnode_bad __xdata * +f4 (const dlist_bad * obj) +{ + return (*obj) ? (*obj)->nxt : 0; +} + +dlnode_bad __xdata * +f5 (__xdata dlist_bad * obj) +{ + return (*obj) ? (*obj)->nxt : 0; +} + +dlnode_bad __xdata * +f6 (dlnode_bad __xdata * const * obj) +{ + return (*obj) ? (*obj)->nxt : 0; +} + +dlnode_bad __xdata * +f7 (dlnode_bad __xdata * __xdata * obj) +{ + return (*obj) ? (*obj)->nxt : 0; +} + +void +testBug (void) +{ + ASSERT (f0(&gl) == &good); + ASSERT (f1(&gl) == &good); + ASSERT (f2(&gl) == &good); + ASSERT (f3(&gl) == &good); + + ASSERT (f4(&bl) == &bad); + ASSERT (f5(&bl) == &bad); + ASSERT (f6(&bl) == &bad); + ASSERT (f7(&bl) == &bad); +} |
