3 storage: idata, xdata, code,
6 #define STORAGE {storage}
11 typedef unsigned int size_t;
12 #define offsetof(s,m) (size_t)&(((s *)0)->m)
14 #if defined(PORT_HOST) || defined(SDCC_z80) || defined(SDCC_gbz80)
20 char array[5] = {'a', 'b', 'c'};
41 /* I think section 6.7.2.1 paragraph 2 of ISO/IEC 9899:1999 prohibits */
42 /* nesting a structure ending in a flexible array inside another */
43 /* struct/union. In any case, my gcc (3.2.2) chokes on this. -- EEP */
44 #ifdef NESTED_FLEX_ARRAY
51 struct x STORAGE teststruct[5] = {
52 { 10, { 1, 2, 3, 4, 5} },
57 struct y STORAGE incompletestruct = {
61 #ifdef NESTED_FLEX_ARRAY
62 struct z STORAGE nestedstruct = {
71 ASSERT(array[2] == 'c');
72 ASSERT(array[4] == 0);
74 ASSERT(g[1].a == 'y');
76 ASSERT(g[2].a == 'z');
79 ASSERT(teststruct[0].b[1] == 2);
80 ASSERT(teststruct[0].b[5] == 0);
81 ASSERT(teststruct[1].b[0] == 11);
82 ASSERT(teststruct[4].b[9] == 0);
84 ASSERT(sizeof(teststruct[2].a) == 2);
85 ASSERT(sizeof(teststruct[1].b) == 10);
86 ASSERT(sizeof(teststruct[1]) == 12);
87 ASSERT(sizeof(teststruct) == 60);
89 ASSERT(incompletestruct.a == 10);
90 ASSERT(incompletestruct.b[0] == 1);
91 ASSERT(incompletestruct.b[4] == 5);
93 ASSERT(sizeof(incompletestruct) == sizeof(struct y));
94 ASSERT(sizeof(incompletestruct) == offsetof(struct y, b));
95 ASSERT(sizeof(incompletestruct) == offsetof(struct x, b));
97 #ifdef NESTED_FLEX_ARRAY
98 ASSERT(nestedstruct.c == 16);
99 ASSERT(nestedstruct.s.a == 20);
100 ASSERT(nestedstruct.s.b[2] == 8);