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