1 /* Copyright (C) 2001-2021 Free Software Foundation, Inc.
2 
3    This program is free software; you can redistribute it and/or modify
4    it under the terms of the GNU General Public License as published by
5    the Free Software Foundation; either version 3 of the License, or
6    (at your option) any later version.
7 
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12 
13    You should have received a copy of the GNU General Public License
14    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
15 
16 
17 /*
18  * Initial set of typed variables borrowed from ptype.c
19  */
20 
21 #if !defined (__STDC__) && !defined (_AIX)
22 #define signed  /**/
23 #endif
24 
25 char		v_char;
26 signed char	v_signed_char;
27 unsigned char	v_unsigned_char;
28 
29 short		v_short;
30 signed short	v_signed_short;
31 unsigned short	v_unsigned_short;
32 
33 int		v_int;
34 signed int	v_signed_int;
35 unsigned int	v_unsigned_int;
36 
37 long		v_long;
38 signed long	v_signed_long;
39 unsigned long	v_unsigned_long;
40 
41 long long	   v_long_long;
42 signed long long   v_signed_long_long;
43 unsigned long long v_unsigned_long_long;
44 
45 float		v_float;
46 double		v_double;
47 
48 /*
49  *	Now some derived types, which are arrays, functions-returning,
50  *	pointers, structures, unions, and enumerations.
51  */
52 
53 /**** arrays *******/
54 
55 char		v_char_array[2];
56 signed char	v_signed_char_array[2];
57 unsigned char	v_unsigned_char_array[2];
58 
59 short		v_short_array[2];
60 signed short	v_signed_short_array[2];
61 unsigned short	v_unsigned_short_array[2];
62 
63 int		v_int_array[2];
64 signed int	v_signed_int_array[2];
65 unsigned int	v_unsigned_int_array[2];
66 
67 long		v_long_array[2];
68 signed long	v_signed_long_array[2];
69 unsigned long	v_unsigned_long_array[2];
70 
71 float		v_float_array[2];
72 double		v_double_array[2];
73 
74 /* PR 3742 */
75 typedef char t_char_array[];
76 
77 /**** pointers *******/
78 
79 char		*v_char_pointer;
80 signed char	*v_signed_char_pointer;
81 unsigned char	*v_unsigned_char_pointer;
82 
83 short		*v_short_pointer;
84 signed short	*v_signed_short_pointer;
85 unsigned short	*v_unsigned_short_pointer;
86 
87 int		*v_int_pointer;
88 signed int	*v_signed_int_pointer;
89 unsigned int	*v_unsigned_int_pointer;
90 
91 long		*v_long_pointer;
92 signed long	*v_signed_long_pointer;
93 unsigned long	*v_unsigned_long_pointer;
94 
95 float		*v_float_pointer;
96 double		*v_double_pointer;
97 
98 char		**v_char_pointer_pointer;
99 signed char	**v_signed_char_pointer_pointer;
100 unsigned char	**v_unsigned_char_pointer_pointer;
101 
102 short		**v_short_pointer_pointer;
103 signed short	**v_signed_short_pointer_pointer;
104 unsigned short	**v_unsigned_short_pointer_pointer;
105 
106 int		**v_int_pointer_pointer;
107 signed int	**v_signed_int_pointer_pointer;
108 unsigned int	**v_unsigned_int_pointer_pointer;
109 
110 long		**v_long_pointer_pointer;
111 signed long	**v_signed_long_pointer_pointer;
112 unsigned long	**v_unsigned_long_pointer_pointer;
113 
114 float		**v_float_pointer_pointer;
115 double		**v_double_pointer_pointer;
116 
117 /**** pointers to arrays, arrays of pointers *******/
118 
119 char		*v_char_array_pointer[2];
120 signed char	*v_signed_char_array_pointer[2];
121 unsigned char	*v_unsigned_char_array_pointer[2];
122 
123 short		*v_short_array_pointer[2];
124 signed short	*v_signed_short_array_pointer[2];
125 unsigned short	*v_unsigned_short_array_pointer[2];
126 
127 int		*v_int_array_pointer[2];
128 signed int	*v_signed_int_array_pointer[2];
129 unsigned int	*v_unsigned_int_array_pointer[2];
130 
131 long		*v_long_array_pointer[2];
132 signed long	*v_signed_long_array_pointer[2];
133 unsigned long	*v_unsigned_long_array_pointer[2];
134 
135 float		*v_float_array_pointer[2];
136 double		*v_double_array_pointer[2];
137 
138 char		(*v_char_pointer_array)[2];
139 signed char	(*v_signed_char_pointer_array)[2];
140 unsigned char	(*v_unsigned_char_pointer_array)[2];
141 
142 short		(*v_short_pointer_array)[2];
143 signed short	(*v_signed_short_pointer_array)[2];
144 unsigned short	(*v_unsigned_short_pointer_array)[2];
145 
146 int		(*v_int_pointer_array)[2];
147 signed int	(*v_signed_int_pointer_array)[2];
148 unsigned int	(*v_unsigned_int_pointer_array)[2];
149 
150 long		(*v_long_pointer_array)[2];
151 signed long	(*v_signed_long_pointer_array)[2];
152 unsigned long	(*v_unsigned_long_pointer_array)[2];
153 
154 float		(*v_float_pointer_array)[2];
155 double		(*v_double_pointer_array)[2];
156 
157 
158 /**** structs *******/
159 
160 struct t_struct {
161     char	v_char_member;
162     short	v_short_member;
163     int		v_int_member;
164     long	v_long_member;
165     float	v_float_member;
166     double	v_double_member;
167 } v_struct1;
168 
169 struct t_struct *v_t_struct_p;
170 
171 struct {
172     char	v_char_member;
173     short	v_short_member;
174     int		v_int_member;
175     long	v_long_member;
176     float	v_float_member;
177     double	v_double_member;
178 } v_struct2;
179 
180 /* typedef'd struct without a tag.  */
181 typedef struct {
182   double v_double_member;
183   int v_int_member;
184 } t_struct3;
185 /* GCC seems to want a variable of this type, or else it won't put out
186    a symbol.  */
187 t_struct3 v_struct3;
188 
189 /**** unions *******/
190 
191 union t_union {
192     char	v_char_member;
193     short	v_short_member;
194     int		v_int_member;
195     long	v_long_member;
196     float	v_float_member;
197     double	v_double_member;
198 } v_union;
199 
200 union {
201     char	v_char_member;
202     short	v_short_member;
203     int		v_int_member;
204     long	v_long_member;
205     float	v_float_member;
206     double	v_double_member;
207 } v_union2;
208 
209 /* typedef'd union without a tag.  */
210 typedef union {
211   double v_double_member;
212   int v_int_member;
213 } t_union3;
214 /* GCC seems to want a variable of this type, or else it won't put out
215    a symbol.  */
216 t_union3 v_union3;
217 
218 /**** Enumerations *******/
219 
220 enum
221 /* Work around the bug for compilers which don't put out the right stabs.  */
222 #if __GNUC__ < 2 && !defined (_AIX)
223 primary1_tag
224 #endif
225 {red1, green1, blue1} primary1;
226 
227 enum {red, green, blue} primary;
228 enum colors {yellow, purple, pink} nonprimary;
229 
230 enum {chevy, ford} clunker;
231 enum cars {bmw, porsche} sportscar;
232 
233 #undef FALSE
234 #undef TRUE
235 typedef enum {FALSE, TRUE} boolean;
236 boolean v_boolean;
237 /*note: aCC has bool type predefined with 'false' and 'true'*/
238 typedef enum bvals {my_false, my_true} boolean2;
239 boolean2 v_boolean2;
240 
241 enum misordered {two = 2, one = 1, zero = 0, three = 3};
242 
243 /* Seems like we need a variable of this type to get the type to be put
244    in the executable, at least for AIX xlc.  */
245 enum misordered v_misordered = three;
246 
247 /**** Function pointers *******/
248 
249 char		(*v_char_func) (int, int*);
250 signed char	(*v_signed_char_func) (int, int*);
251 unsigned char	(*v_unsigned_char_func) (int, int*);
252 
253 short		(*v_short_func) (int, int*);
254 signed short	(*v_signed_short_func) (int, int*);
255 unsigned short	(*v_unsigned_short_func) (int, int*);
256 
257 int		(*v_int_func) (int, int*);
258 signed int	(*v_signed_int_func) (int, int*);
259 unsigned int	(*v_unsigned_int_func) (int, int*);
260 
261 long		(*v_long_func) (int, int*);
262 signed long	(*v_signed_long_func) (int, int*);
263 unsigned long	(*v_unsigned_long_func) (int, int*);
264 
265 long long		(*v_long_long_func) (int, int*);
266 signed long long	(*v_signed_long_long_func) (int, int*);
267 unsigned long long	(*v_unsigned_long_long_func) (int, int*);
268 
269 float		(*v_float_func) (int, int*);
270 double		(*v_double_func) (int, int*);
271 
use(void * p)272 void use (void *p)
273 {
274 }
275 
main()276 int main ()
277 {
278   use (&v_char);
279   use (&v_signed_char);
280   use (&v_unsigned_char);
281 
282   use (&v_short);
283   use (&v_signed_short);
284   use (&v_unsigned_short);
285 
286   use (&v_int);
287   use (&v_signed_int);
288   use (&v_unsigned_int);
289 
290   use (&v_long);
291   use (&v_signed_long);
292   use (&v_unsigned_long);
293 
294   use (&v_long_long);
295   use (&v_signed_long_long);
296   use (&v_unsigned_long_long);
297 
298   use (&v_float);
299   use (&v_double);
300 
301   use (v_char_array);
302   use (v_signed_char_array);
303   use (v_unsigned_char_array);
304 
305   use (v_short_array);
306   use (v_signed_short_array);
307   use (v_unsigned_short_array);
308 
309   use (v_int_array);
310   use (v_signed_int_array);
311   use (v_unsigned_int_array);
312 
313   use (v_long_array);
314   use (v_signed_long_array);
315   use (v_unsigned_long_array);
316 
317   use (v_float_array);
318   use (v_double_array);
319 
320   use (v_char_pointer);
321   use (v_signed_char_pointer);
322   use (v_unsigned_char_pointer);
323 
324   use (v_short_pointer);
325   use (v_signed_short_pointer);
326   use (v_unsigned_short_pointer);
327 
328   use (v_int_pointer);
329   use (v_signed_int_pointer);
330   use (v_unsigned_int_pointer);
331 
332   use (v_long_pointer);
333   use (v_signed_long_pointer);
334   use (v_unsigned_long_pointer);
335 
336   use (v_float_pointer);
337   use (v_double_pointer);
338 
339   use (v_char_pointer_pointer);
340   use (v_signed_char_pointer_pointer);
341   use (v_unsigned_char_pointer_pointer);
342 
343   use (v_short_pointer_pointer);
344   use (v_signed_short_pointer_pointer);
345   use (v_unsigned_short_pointer_pointer);
346 
347   use (v_int_pointer_pointer);
348   use (v_signed_int_pointer_pointer);
349   use (v_unsigned_int_pointer_pointer);
350 
351   use (v_long_pointer_pointer);
352   use (v_signed_long_pointer_pointer);
353   use (v_unsigned_long_pointer_pointer);
354 
355   use (v_float_pointer_pointer);
356   use (v_double_pointer_pointer);
357 
358   use (v_char_array_pointer);
359   use (v_signed_char_array_pointer);
360   use (v_unsigned_char_array_pointer);
361 
362   use (v_short_array_pointer);
363   use (v_signed_short_array_pointer);
364   use (v_unsigned_short_array_pointer);
365 
366   use (v_int_array_pointer);
367   use (v_signed_int_array_pointer);
368   use (v_unsigned_int_array_pointer);
369 
370   use (v_long_array_pointer);
371   use (v_signed_long_array_pointer);
372   use (v_unsigned_long_array_pointer);
373 
374   use (v_float_array_pointer);
375   use (v_double_array_pointer);
376 
377   use (v_char_pointer_array);
378   use (v_signed_char_pointer_array);
379   use (v_unsigned_char_pointer_array);
380 
381   use (v_short_pointer_array);
382   use (v_signed_short_pointer_array);
383   use (v_unsigned_short_pointer_array);
384 
385   use (v_int_pointer_array);
386   use (v_signed_int_pointer_array);
387   use (v_unsigned_int_pointer_array);
388 
389   use (v_long_pointer_array);
390   use (v_signed_long_pointer_array);
391   use (v_unsigned_long_pointer_array);
392 
393   use (v_float_pointer_array);
394   use (v_double_pointer_array);
395 
396   use (&v_struct1);
397   use (&v_struct2);
398   use (&v_struct3);
399 
400   use (&v_union);
401   use (&v_union2);
402   use (&v_union3);
403 
404   use (&v_boolean);
405   use (&v_boolean2);
406   use (&v_misordered);
407 
408   use (&v_char_func);
409   use (&v_signed_char_func);
410   use (&v_unsigned_char_func);
411 
412   use (&v_short_func);
413   use (&v_signed_short_func);
414   use (&v_unsigned_short_func);
415 
416   use (&v_int_func);
417   use (&v_signed_int_func);
418   use (&v_unsigned_int_func);
419 
420   use (&v_long_func);
421   use (&v_signed_long_func);
422   use (&v_unsigned_long_func);
423 
424   use (&v_long_long_func);
425   use (&v_signed_long_long_func);
426   use (&v_unsigned_long_long_func);
427 
428   use (&v_float_func);
429   use (&v_double_func);
430 
431   return 0;
432 }
433