1 #include "config.h"
2 #include "config.hxx"
3 #include "someclass.hxx"
4
5 #ifdef HAVE_SYS_TYPES_H
6 # include <sys/types.h>
7 #endif
8 #ifdef HAVE_STDINT_H
9 # include <stdint.h>
10 #endif
11 #ifdef HAVE_STDDEF_H
12 # include <stddef.h>
13 #endif
14 #ifdef HAVE_CSTDINT
15 # include <cstdint>
16 #endif
17 #ifdef HAVE_CSTDDEF
18 # include <cstddef>
19 #endif
20
21 #include <stdio.h>
22
23 #define CHECK(t, m) \
24 do { \
25 if (sizeof(t) != m) { \
26 printf(#m ": expected %d, got %d (line %d)\n", (int)sizeof(t), (int)m, \
27 __LINE__); \
28 result = 1; \
29 } \
30 } while (0)
31
32 #define NODEF(m) \
33 do { \
34 printf(#m ": not defined (line %d)\n", __LINE__); \
35 result = 1; \
36 } while (0)
37
main()38 int main()
39 {
40 int result = 0;
41 ns::someclass y;
42
43 /* void* */
44 #if !defined(HAVE_SIZEOF_DATA_PTR)
45 NODEF(HAVE_SIZEOF_DATA_PTR);
46 #endif
47 #if defined(SIZEOF_DATA_PTR)
48 CHECK(void*, SIZEOF_DATA_PTR);
49 #else
50 NODEF(SIZEOF_DATA_PTR);
51 #endif
52
53 /* char */
54 #if !defined(HAVE_SIZEOF_CHAR)
55 NODEF(HAVE_SIZEOF_CHAR);
56 #endif
57 #if defined(SIZEOF_CHAR)
58 CHECK(char, SIZEOF_CHAR);
59 #else
60 NODEF(SIZEOF_CHAR);
61 #endif
62
63 /* short */
64 #if !defined(HAVE_SIZEOF_SHORT)
65 NODEF(HAVE_SIZEOF_SHORT);
66 #endif
67 #if defined(SIZEOF_SHORT)
68 CHECK(short, SIZEOF_SHORT);
69 #else
70 NODEF(SIZEOF_SHORT);
71 #endif
72
73 /* int */
74 #if !defined(HAVE_SIZEOF_INT)
75 NODEF(HAVE_SIZEOF_INT);
76 #endif
77 #if defined(SIZEOF_INT)
78 CHECK(int, SIZEOF_INT);
79 #else
80 NODEF(SIZEOF_INT);
81 #endif
82
83 /* long */
84 #if !defined(HAVE_SIZEOF_LONG)
85 NODEF(HAVE_SIZEOF_LONG);
86 #endif
87 #if defined(SIZEOF_LONG)
88 CHECK(long, SIZEOF_LONG);
89 #else
90 NODEF(SIZEOF_LONG);
91 #endif
92
93 /* long long */
94 #if defined(SIZEOF_LONG_LONG)
95 CHECK(long long, SIZEOF_LONG_LONG);
96 # if !defined(HAVE_SIZEOF_LONG_LONG)
97 NODEF(HAVE_SIZEOF_LONG_LONG);
98 # endif
99 #endif
100
101 /* __int64 */
102 #if defined(SIZEOF___INT64)
103 CHECK(__int64, SIZEOF___INT64);
104 # if !defined(HAVE_SIZEOF___INT64)
105 NODEF(HAVE_SIZEOF___INT64);
106 # endif
107 #elif defined(HAVE_SIZEOF___INT64)
108 NODEF(SIZEOF___INT64);
109 #endif
110
111 /* size_t */
112 #if !defined(HAVE_SIZEOF_SIZE_T)
113 NODEF(HAVE_SIZEOF_SIZE_T);
114 #endif
115 #if defined(SIZEOF_SIZE_T)
116 CHECK(size_t, SIZEOF_SIZE_T);
117 #else
118 NODEF(SIZEOF_SIZE_T);
119 #endif
120
121 /* ssize_t */
122 #if defined(SIZEOF_SSIZE_T)
123 CHECK(ssize_t, SIZEOF_SSIZE_T);
124 # if !defined(HAVE_SIZEOF_SSIZE_T)
125 NODEF(HAVE_SIZEOF_SSIZE_T);
126 # endif
127 #elif defined(HAVE_SIZEOF_SSIZE_T)
128 NODEF(SIZEOF_SSIZE_T);
129 #endif
130
131 /* uint8_t */
132 #if defined(SIZEOF_UINT8_T)
133 CHECK(uint8_t, SIZEOF_UINT8_T);
134 # if !defined(HAVE_SIZEOF_UINT8_T)
135 NODEF(HAVE_SIZEOF_UINT8_T);
136 # endif
137 #elif defined(HAVE_SIZEOF_UINT8_T)
138 NODEF(SIZEOF_UINT8_T);
139 #endif
140
141 /* std::uint8_t */
142 #if defined(SIZEOF_STD_UINT8_T)
143 CHECK(std::uint8_t, SIZEOF_STD_UINT8_T);
144 # if !defined(HAVE_SIZEOF_STD_UINT8_T)
145 NODEF(HAVE_SIZEOF_STD_UINT8_T);
146 # endif
147 #elif defined(HAVE_SIZEOF_STD_UINT8_T)
148 NODEF(SIZEOF_STD_UINT8_T);
149 #endif
150
151 /* ns::someclass::someint */
152 #if defined(SIZEOF_NS_CLASSMEMBER_INT)
153 CHECK(y.someint, SIZEOF_NS_CLASSMEMBER_INT);
154 CHECK(y.someint, SIZEOF_INT);
155 # if !defined(HAVE_SIZEOF_NS_CLASSMEMBER_INT)
156 NODEF(HAVE_SIZEOF_STRUCTMEMBER_INT);
157 # endif
158 #elif defined(HAVE_SIZEOF_STRUCTMEMBER_INT)
159 NODEF(SIZEOF_STRUCTMEMBER_INT);
160 #endif
161
162 /* ns::someclass::someptr */
163 #if defined(SIZEOF_NS_CLASSMEMBER_PTR)
164 CHECK(y.someptr, SIZEOF_NS_CLASSMEMBER_PTR);
165 CHECK(y.someptr, SIZEOF_DATA_PTR);
166 # if !defined(HAVE_SIZEOF_NS_CLASSMEMBER_PTR)
167 NODEF(HAVE_SIZEOF_NS_CLASSMEMBER_PTR);
168 # endif
169 #elif defined(HAVE_SIZEOF_NS_CLASSMEMBER_PTR)
170 NODEF(SIZEOF_NS_CLASSMEMBER_PTR);
171 #endif
172
173 /* ns::someclass::somechar */
174 #if defined(SIZEOF_NS_CLASSMEMBER_CHAR)
175 CHECK(y.somechar, SIZEOF_NS_CLASSMEMBER_CHAR);
176 CHECK(y.somechar, SIZEOF_CHAR);
177 # if !defined(HAVE_SIZEOF_NS_CLASSMEMBER_CHAR)
178 NODEF(HAVE_SIZEOF_NS_CLASSMEMBER_CHAR);
179 # endif
180 #elif defined(HAVE_SIZEOF_NS_CLASSMEMBER_CHAR)
181 NODEF(SIZEOF_NS_CLASSMEMBER_CHAR);
182 #endif
183
184 /* ns::someclass::somebool */
185 #if defined(SIZEOF_NS_CLASSMEMBER_BOOL)
186 CHECK(y.somechar, SIZEOF_NS_CLASSMEMBER_BOOL);
187 CHECK(y.somechar, SIZEOF_BOOL);
188 # if !defined(HAVE_SIZEOF_NS_CLASSMEMBER_BOOL)
189 NODEF(HAVE_SIZEOF_NS_CLASSMEMBER_BOOL);
190 # endif
191 #elif defined(HAVE_SIZEOF_NS_CLASSMEMBER_BOOL)
192 NODEF(SIZEOF_NS_CLASSMEMBER_BOOL);
193 #endif
194
195 /* to avoid possible warnings about unused or write-only variable */
196 y.someint = result;
197
198 return y.someint;
199 }
200