1 /* Copyright (C) 2001-2023 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 272 void use (void *p) 273 { 274 } 275 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