Pick three bugfixes from next branch to trunk for inclusion in 4.5.0 RC2, as discusse...
[sdcc.git] / sdcc / support / regression / tests / bug2817646.c
blob68733ab2f1d75a28ec8f8285d2621032e3ae2827
1 /* bug2817646.c
2 * Structure order error
3 */
5 #include <testfwk.h>
6 #include <stddef.h>
8 typedef struct dlnode_good {
9 struct dlnode_good __xdata * nxt;
10 struct dlnode_good __xdata * prv;
11 } dlnode_good;
13 typedef dlnode_good __xdata * dlist_good;
15 __xdata dlnode_good good = { &good, NULL };
16 __xdata dlist_good gl = &good;
18 dlnode_good __xdata *
19 f0 (const dlist_good * obj)
21 return (*obj) ? (*obj)->nxt : 0;
24 dlnode_good __xdata *
25 f1 (__xdata dlist_good * obj)
27 return (*obj) ? (*obj)->nxt : 0;
30 dlnode_good __xdata *
31 f2 (dlnode_good __xdata * const * obj)
33 return (*obj) ? (*obj)->nxt : 0;
36 dlnode_good __xdata *
37 f3 (dlnode_good __xdata * __xdata * obj)
39 return (*obj) ? (*obj)->nxt : 0;
42 typedef struct dlnode_bad {
43 struct dlnode_bad __xdata * prv;
44 struct dlnode_bad __xdata * nxt;
45 } dlnode_bad;
47 typedef dlnode_bad __xdata * dlist_bad;
49 __xdata dlnode_bad bad = { NULL, &bad };
50 __xdata dlist_bad bl = &bad;
52 dlnode_bad __xdata *
53 f4 (const dlist_bad * obj)
55 return (*obj) ? (*obj)->nxt : 0;
58 dlnode_bad __xdata *
59 f5 (__xdata dlist_bad * obj)
61 return (*obj) ? (*obj)->nxt : 0;
64 dlnode_bad __xdata *
65 f6 (dlnode_bad __xdata * const * obj)
67 return (*obj) ? (*obj)->nxt : 0;
70 dlnode_bad __xdata *
71 f7 (dlnode_bad __xdata * __xdata * obj)
73 return (*obj) ? (*obj)->nxt : 0;
76 void
77 testBug (void)
79 ASSERT (f0(&gl) == &good);
80 ASSERT (f1(&gl) == &good);
81 ASSERT (f2(&gl) == &good);
82 ASSERT (f3(&gl) == &good);
84 ASSERT (f4(&bl) == &bad);
85 ASSERT (f5(&bl) == &bad);
86 ASSERT (f6(&bl) == &bad);
87 ASSERT (f7(&bl) == &bad);