1 /* Test -fdump-go-specs option. */ 2 3 /* { dg-options "-c -fdump-go-spec=godump-1.out" } */ 4 /* { dg-do compile } */ 5 /* { dg-skip-if "not supported for target" { ! "alpha*-*-* s390*-*-* i?86-*-* x86_64-*-*" } } */ 6 /* { dg-skip-if "not supported for target" { ! lp64 } } */ 7 8 #include <stdint.h> 9 10 /* Necessary quoting in the regexp patters: 11 12 (?n) at beginning of pattern to make ^ and $ work. 13 " -> \" 14 *, + -> "*", "+" 15 [, ] -> "\[", "\]" 16 (, ) -> "\[(\]", "\[)\]" 17 {, } -> "\{", "\}" 18 */ 19 20 /*** integer based types ***/ 21 typedef char c_t; 22 /* { dg-final { scan-file godump-1.out "(?n)^type _c_t u?int8$" } } */ 23 24 char c_v1; 25 /* { dg-final { scan-file godump-1.out "(?n)^var _c_v1 u?int\[0-9\]*$" } } */ 26 27 c_t c_v2; 28 /* { dg-final { scan-file godump-1.out "(?n)^var _c_v2 _c_t$" } } */ 29 30 typedef short s_t; 31 /* { dg-final { scan-file godump-1.out "(?n)^type _s_t int\[0-9\]*$" } } */ 32 33 short s_v1; 34 /* { dg-final { scan-file godump-1.out "(?n)^var _s_v1 int\[0-9\]*$" } } */ 35 36 s_t s_v2; 37 /* { dg-final { scan-file godump-1.out "(?n)^var _s_v2 _s_t$" } } */ 38 39 typedef int i_t; 40 /* { dg-final { scan-file godump-1.out "(?n)^type _i_t int\[0-9\]*$" } } */ 41 42 int i_v1; 43 /* { dg-final { scan-file godump-1.out "(?n)^var _i_v1 int\[0-9\]*$" } } */ 44 45 i_t i_v2; 46 /* { dg-final { scan-file godump-1.out "(?n)^var _i_v2 _i_t$" } } */ 47 48 typedef long l_t; 49 /* { dg-final { scan-file godump-1.out "(?n)^type _l_t int\[0-9\]*$" } } */ 50 51 long l_v1; 52 /* { dg-final { scan-file godump-1.out "(?n)^var _l_v1 int\[0-9\]*$" } } */ 53 54 l_t l_v2; 55 /* { dg-final { scan-file godump-1.out "(?n)^var _l_v2 _l_t$" } } */ 56 57 typedef long long ll_t; 58 /* { dg-final { scan-file godump-1.out "(?n)^type _ll_t int\[0-9\]*$" } } */ 59 60 long long ll_v1; 61 /* { dg-final { scan-file godump-1.out "(?n)^var _ll_v1 int\[0-9\]*$" } } */ 62 63 ll_t ll_v2; 64 /* { dg-final { scan-file godump-1.out "(?n)^var _ll_v2 _ll_t$" } } */ 65 66 typedef unsigned char uc_t; 67 /* { dg-final { scan-file godump-1.out "(?n)^type _uc_t uint8$" } } */ 68 69 unsigned char uc_v1; 70 /* { dg-final { scan-file godump-1.out "(?n)^var _uc_v1 uint\[0-9\]*$" } } */ 71 72 uc_t uc_v2; 73 /* { dg-final { scan-file godump-1.out "(?n)^var _uc_v2 _uc_t$" } } */ 74 75 typedef unsigned short us_t; 76 /* { dg-final { scan-file godump-1.out "(?n)^type _us_t uint\[0-9\]*$" } } */ 77 78 unsigned short us_v1; 79 /* { dg-final { scan-file godump-1.out "(?n)^var _us_v1 uint\[0-9\]*$" } } */ 80 81 us_t us_v2; 82 /* { dg-final { scan-file godump-1.out "(?n)^var _us_v2 _us_t$" } } */ 83 84 typedef unsigned int ui_t; 85 /* { dg-final { scan-file godump-1.out "(?n)^type _ui_t uint\[0-9\]*$" } } */ 86 87 unsigned int ui_v1; 88 /* { dg-final { scan-file godump-1.out "(?n)^var _ui_v1 uint\[0-9\]*$" } } */ 89 90 ui_t ui_v2; 91 /* { dg-final { scan-file godump-1.out "(?n)^var _ui_v2 _ui_t$" } } */ 92 93 typedef unsigned long ul_t; 94 /* { dg-final { scan-file godump-1.out "(?n)^type _ul_t uint\[0-9\]*$" } } */ 95 96 unsigned long ul_v1; 97 /* { dg-final { scan-file godump-1.out "(?n)^var _ul_v1 uint\[0-9\]*$" } } */ 98 99 ul_t ul_v2; 100 /* { dg-final { scan-file godump-1.out "(?n)^var _ul_v2 _ul_t$" } } */ 101 102 typedef unsigned long long ull_t; 103 /* { dg-final { scan-file godump-1.out "(?n)^type _ull_t uint\[0-9\]*$" } } */ 104 105 unsigned long long ull_v1; 106 /* { dg-final { scan-file godump-1.out "(?n)^var _ull_v1 uint\[0-9\]*$" } } */ 107 108 ull_t ull_v2; 109 /* { dg-final { scan-file godump-1.out "(?n)^var _ull_v2 _ull_t$" } } */ 110 111 typedef signed char sc_t; 112 /* { dg-final { scan-file godump-1.out "(?n)^type _sc_t int8$" } } */ 113 114 signed char sc_v1; 115 /* { dg-final { scan-file godump-1.out "(?n)^var _sc_v1 int\[0-9\]*$" } } */ 116 117 sc_t sc_v2; 118 /* { dg-final { scan-file godump-1.out "(?n)^var _sc_v2 _sc_t$" } } */ 119 120 typedef signed short ss_t; 121 /* { dg-final { scan-file godump-1.out "(?n)^type _ss_t int\[0-9\]*$" } } */ 122 123 signed short ss_v1; 124 /* { dg-final { scan-file godump-1.out "(?n)^var _ss_v1 int\[0-9\]*$" } } */ 125 126 ss_t ss_v2; 127 /* { dg-final { scan-file godump-1.out "(?n)^var _ss_v2 _ss_t$" } } */ 128 129 typedef signed int si_t; 130 /* { dg-final { scan-file godump-1.out "(?n)^type _si_t int\[0-9\]*$" } } */ 131 132 signed int si_v1; 133 /* { dg-final { scan-file godump-1.out "(?n)^var _si_v1 int\[0-9\]*$" } } */ 134 135 si_t si_v2; 136 /* { dg-final { scan-file godump-1.out "(?n)^var _si_v2 _si_t$" } } */ 137 138 typedef signed long sl_t; 139 /* { dg-final { scan-file godump-1.out "(?n)^type _sl_t int\[0-9\]*$" } } */ 140 141 signed long sl_v1; 142 /* { dg-final { scan-file godump-1.out "(?n)^var _sl_v1 int\[0-9\]*$" } } */ 143 144 sl_t sl_v2; 145 /* { dg-final { scan-file godump-1.out "(?n)^var _sl_v2 _sl_t$" } } */ 146 147 typedef signed long long sll_t; 148 /* { dg-final { scan-file godump-1.out "(?n)^type _sll_t int\[0-9\]*$" } } */ 149 150 signed long long sll_v1; 151 /* { dg-final { scan-file godump-1.out "(?n)^var _sll_v1 int\[0-9\]*$" } } */ 152 153 sll_t sll_v2; 154 /* { dg-final { scan-file godump-1.out "(?n)^var _sll_v2 _sll_t$" } } */ 155 156 typedef int8_t i8_t; 157 /* { dg-final { scan-file godump-1.out "(?n)^type _i8_t int8$" } } */ 158 159 int8_t i8_v1; 160 /* { dg-final { scan-file godump-1.out "(?n)^var _i8_v1 _int8_t$" } } */ 161 162 i8_t i8_v2; 163 /* { dg-final { scan-file godump-1.out "(?n)^var _i8_v2 _i8_t$" } } */ 164 165 typedef int16_t i16_t; 166 /* { dg-final { scan-file godump-1.out "(?n)^type _i16_t int16$" } } */ 167 168 int16_t i16_v1; 169 /* { dg-final { scan-file godump-1.out "(?n)^var _i16_v1 _int16_t$" } } */ 170 171 i16_t i16_v2; 172 /* { dg-final { scan-file godump-1.out "(?n)^var _i16_v2 _i16_t$" } } */ 173 174 typedef int32_t i32_t; 175 /* { dg-final { scan-file godump-1.out "(?n)^type _i32_t int32$" } } */ 176 177 int32_t i32_v1; 178 /* { dg-final { scan-file godump-1.out "(?n)^var _i32_v1 _int32_t$" } } */ 179 180 i32_t i32_v2; 181 /* { dg-final { scan-file godump-1.out "(?n)^var _i32_v2 _i32_t$" } } */ 182 183 typedef int64_t i64_t; 184 /* { dg-final { scan-file godump-1.out "(?n)^type _i64_t int64$" } } */ 185 186 int64_t i64_v1; 187 /* { dg-final { scan-file godump-1.out "(?n)^var _i64_v1 _int64_t$" } } */ 188 189 i64_t i64_v2; 190 /* { dg-final { scan-file godump-1.out "(?n)^var _i64_v2 _i64_t$" } } */ 191 192 typedef uint8_t ui8_t; 193 /* { dg-final { scan-file godump-1.out "(?n)^type _ui8_t uint8$" } } */ 194 195 uint8_t ui8_v1; 196 /* { dg-final { scan-file godump-1.out "(?n)^var _ui8_v1 _uint8_t$" } } */ 197 198 ui8_t ui8_v2; 199 /* { dg-final { scan-file godump-1.out "(?n)^var _ui8_v2 _ui8_t$" } } */ 200 201 typedef uint16_t iu16_t; 202 /* { dg-final { scan-file godump-1.out "(?n)^type _iu16_t uint16$" } } */ 203 204 uint16_t iu16_v1; 205 /* { dg-final { scan-file godump-1.out "(?n)^var _iu16_v1 _uint16_t$" } } */ 206 207 iu16_t iu16_v2; 208 /* { dg-final { scan-file godump-1.out "(?n)^var _iu16_v2 _iu16_t$" } } */ 209 210 typedef uint32_t iu32_t; 211 /* { dg-final { scan-file godump-1.out "(?n)^type _iu32_t uint32$" } } */ 212 213 uint32_t iu32_v1; 214 /* { dg-final { scan-file godump-1.out "(?n)^var _iu32_v1 _uint32_t$" } } */ 215 216 iu32_t iu32_v2; 217 /* { dg-final { scan-file godump-1.out "(?n)^var _iu32_v2 _iu32_t$" } } */ 218 219 typedef uint64_t iu64_t; 220 /* { dg-final { scan-file godump-1.out "(?n)^type _iu64_t uint64$" } } */ 221 222 uint64_t iu64_v1; 223 /* { dg-final { scan-file godump-1.out "(?n)^var _iu64_v1 _uint64_t$" } } */ 224 225 iu64_t iu64_v2; 226 /* { dg-final { scan-file godump-1.out "(?n)^var _iu64_v2 _iu64_t$" } } */ 227 228 typedef const char cc_t; 229 /* { dg-final { scan-file godump-1.out "(?n)^type _cc_t u?int8$" } } */ 230 231 const char cc_v1; 232 /* { dg-final { scan-file godump-1.out "(?n)^var _cc_v1 u?int8$" } } */ 233 234 cc_t cc_v2; 235 /* { dg-final { scan-file godump-1.out "(?n)^var _cc_v2 _cc_t$" } } */ 236 237 238 /*** pointer and array types ***/ 239 typedef void *vp_t; 240 /* { dg-final { scan-file godump-1.out "(?n)^type _vp_t \\*byte$" } } */ 241 242 void *vp_v1; 243 /* { dg-final { scan-file godump-1.out "(?n)^var _vp_v1 \\*byte$" } } */ 244 245 vp_t vp_v2; 246 /* { dg-final { scan-file godump-1.out "(?n)^var _vp_v2 _vp_t$" } } */ 247 248 typedef int **ipp_t; 249 /* { dg-final { scan-file godump-1.out "(?n)^type _ipp_t \\*\\*int\[0-9\]*$" } } */ 250 251 int **ipp_v1; 252 /* { dg-final { scan-file godump-1.out "(?n)^var _ipp_v1 \\*\\*int\[0-9\]*$" } } */ 253 254 ipp_t ipp_v2; 255 /* { dg-final { scan-file godump-1.out "(?n)^var _ipp_v2 _ipp_t$" } } */ 256 257 typedef char ca_t[]; 258 /* { dg-final { scan-file godump-1.out "(?n)^type _ca_t \\\[0\\\]u?int8$" } } */ 259 260 char ca_v1[]; /* { dg-warning "array 'ca_v1' assumed to have one element" } */ 261 /* { dg-final { scan-file godump-1.out "(?n)^var _ca_v1 \\\[0\\+1\\\]u?int8$" } } */ 262 263 char ca_v1b[2]; 264 /* { dg-final { scan-file godump-1.out "(?n)^var _ca_v1b \\\[1\\+1\\\]u?int8$" } } */ 265 266 ca_t ca_v2; /* { dg-warning "array 'ca_v2' assumed to have one element" } */ 267 /* { dg-final { scan-file godump-1.out "(?n)^var _ca_v2 \\\[0\\+1\\\]u?int8$" } } */ 268 269 typedef short sa2_t[2]; 270 /* { dg-final { scan-file godump-1.out "(?n)^type _sa2_t \\\[1\\+1\\\]int\[0-9\]*$" } } */ 271 272 short sa2_v1[2]; 273 /* { dg-final { scan-file godump-1.out "(?n)^var _sa2_v1 \\\[1\\+1\\\]int\[0-9\]*$" } } */ 274 275 sa2_t sa2_v2; 276 /* { dg-final { scan-file godump-1.out "(?n)^var _sa2_v2 _sa2_t$" } } */ 277 278 279 /*** floating point types ***/ 280 typedef float f_t; 281 /* { dg-final { scan-file godump-1.out "(?n)^type _f_t float\[0-9\]*$" } } */ 282 283 float f_v1; 284 /* { dg-final { scan-file godump-1.out "(?n)^var _f_v1 float\[0-9\]*$" } } */ 285 286 f_t f_v2; 287 /* { dg-final { scan-file godump-1.out "(?n)^var _f_v2 _f_t$" } } */ 288 289 typedef double d_t; 290 /* { dg-final { scan-file godump-1.out "(?n)^type _d_t float\[0-9\]*$" } } */ 291 292 double d_v1; 293 /* { dg-final { scan-file godump-1.out "(?n)^var _d_v1 float\[0-9\]*$" } } */ 294 295 d_t d_v2; 296 /* { dg-final { scan-file godump-1.out "(?n)^var _d_v2 _d_t$" } } */ 297 298 typedef long double ld_t; 299 /* { dg-final { scan-file godump-1.out "(?n)^// type _ld_t INVALID-float-\[0-9\]*$" } } */ 300 301 long double ld_v1; 302 /* { dg-final { scan-file godump-1.out "(?n)^// var _ld_v1 INVALID-float-\[0-9\]*$" } } */ 303 304 ld_t ld_v2; 305 /* { dg-final { scan-file godump-1.out "(?n)^// var _ld_v2 INVALID-float-\[0-9\]*$" } } */ 306 307 /*** complex types ***/ 308 typedef _Complex cx_t; 309 /* { dg-final { scan-file godump-1.out "(?n)^type _cx_t complex\[0-9\]*$" } } */ 310 311 _Complex cx_v1; 312 /* { dg-final { scan-file godump-1.out "(?n)^var _cx_v1 complex\[0-9\]*$" } } */ 313 314 cx_t cx_v2; 315 /* { dg-final { scan-file godump-1.out "(?n)^var _cx_v2 _cx_t$" } } */ 316 317 typedef float _Complex fcx_t; 318 /* { dg-final { scan-file godump-1.out "(?n)^type _fcx_t complex\[0-9\]*$" } } */ 319 320 float _Complex fcx_v1; 321 /* { dg-final { scan-file godump-1.out "(?n)^var _fcx_v1 complex\[0-9\]*$" } } */ 322 323 fcx_t fcx_v2; 324 /* { dg-final { scan-file godump-1.out "(?n)^var _fcx_v2 _fcx_t$" } } */ 325 326 typedef double _Complex dcx_t; 327 /* { dg-final { scan-file godump-1.out "(?n)^type _dcx_t complex\[0-9\]*$" } } */ 328 329 double _Complex dcx_v1; 330 /* { dg-final { scan-file godump-1.out "(?n)^var _dcx_v1 complex\[0-9\]*$" } } */ 331 332 dcx_t dcx_v2; 333 /* { dg-final { scan-file godump-1.out "(?n)^var _dcx_v2 _dcx_t$" } } */ 334 335 typedef long double _Complex ldcx_t; 336 /* { dg-final { scan-file godump-1.out "(?n)^// type _ldcx_t INVALID-complex-\[0-9\]*$" } } */ 337 338 long double _Complex ldcx_v1; 339 /* { dg-final { scan-file godump-1.out "(?n)^// var _ldcx_v1 INVALID-complex-\[0-9\]*$" } } */ 340 341 ldcx_t ldcx_v2; 342 /* { dg-final { scan-file godump-1.out "(?n)^// var _ldcx_v2 INVALID-complex-\[0-9\]*$" } } */ 343 344 typedef int _Complex icx_t; 345 /* { dg-final { scan-file godump-1.out "(?n)^// type _icx_t INVALID-complex-non-real$" } } */ 346 347 int _Complex icx_v1; 348 /* { dg-final { scan-file godump-1.out "(?n)^// var _icx_v1 INVALID-complex-non-real$" } } */ 349 350 icx_t icx_v2; 351 /* { dg-final { scan-file godump-1.out "(?n)^// var _icx_v2 INVALID-complex-non-real$" } } */ 352 353 354 /*** nested typedefs ***/ 355 typedef int32_t ni_t; 356 /* { dg-final { scan-file godump-1.out "(?n)^type _ni_t int32$" } } */ 357 358 typedef ni_t ni2_t; 359 /* { dg-final { scan-file godump-1.out "(?n)^type _ni2_t int32$" } } */ 360 361 ni2_t ni2_v2; 362 /* { dg-final { scan-file godump-1.out "(?n)^var _ni2_v2 _ni2_t$" } } */ 363 364 typedef ni2_t ni3_t; 365 /* { dg-final { scan-file godump-1.out "(?n)^type _ni3_t int32$" } } */ 366 367 ni3_t ni3_v2; 368 /* { dg-final { scan-file godump-1.out "(?n)^var _ni3_v2 _ni3_t$" } } */ 369 370 371 /*** enums ***/ 372 enum { E11 }; 373 /* { dg-final { scan-file godump-1.out "(?n)^const _E11 = 0$" } } */ 374 375 enum { EV11 } e1_v1; 376 /* { dg-final { scan-file godump-1.out "(?n)^var _e1_v1 u?int\[0-9\]*$" } } */ 377 /* { dg-final { scan-file godump-1.out "(?n)^const _EV11 = 0$" } } */ 378 379 enum { E21, E22 }; 380 /* { dg-final { scan-file godump-1.out "(?n)^const _E21 = 0$" } } */ 381 /* { dg-final { scan-file godump-1.out "(?n)^const _E22 = 1$" } } */ 382 383 enum { EV21, EV22 } e2_v1; 384 /* { dg-final { scan-file godump-1.out "(?n)^var _e2_v1 u?int\[0-9\]*$" } } */ 385 /* { dg-final { scan-file godump-1.out "(?n)^const _EV21 = 0$" } } */ 386 /* { dg-final { scan-file godump-1.out "(?n)^const _EV22 = 1$" } } */ 387 388 enum { EN1 = 3, EN2 = 77, EN3 = -1, EN4 }; 389 /* { dg-final { scan-file godump-1.out "(?n)^const _EN1 = 3$" } } */ 390 /* { dg-final { scan-file godump-1.out "(?n)^const _EN2 = 77$" } } */ 391 /* { dg-final { scan-file godump-1.out "(?n)^const _EN3 = -1$" } } */ 392 /* { dg-final { scan-file godump-1.out "(?n)^const _EN4 = 0$" } } */ 393 394 typedef enum { ET1, ET2 } et_t; 395 /* { dg-final { scan-file godump-1.out "(?n)^type _et_t u?int\[0-9\]*$" } } */ 396 /* { dg-final { scan-file godump-1.out "(?n)^const _ET1 = 0$" } } */ 397 /* { dg-final { scan-file godump-1.out "(?n)^const _ET2 = 1$" } } */ 398 399 typedef enum e_t_idem_v1 { ETIV1 } e_t_idem_v1; 400 /* { dg-final { scan-file godump-1.out "(?n)^type _e_t_idem_v1 u?int\[0-9\]*$" } } */ 401 /* { dg-final { scan-file godump-1.out "(?n)^const _ETIV1 = 0$" } } */ 402 403 typedef enum e_t_idem_v2 e_t_idem_v2; 404 enum e_t_idem_v2 { ETIV2 }; 405 /* { dg-final { scan-file godump-1.out "(?n)^type _e_t_idem_v2 u?int\[0-9\]*$" } } */ 406 /* { dg-final { scan-file godump-1.out "(?n)^const _ETIV2 = 0$" } } */ 407 408 enum { ETV1, ETV2 } et_v1; 409 /* { dg-final { scan-file godump-1.out "(?n)^var _et_v1 u?int\[0-9\]*$" } } */ 410 /* { dg-final { scan-file godump-1.out "(?n)^const _ETV1 = 0$" } } */ 411 /* { dg-final { scan-file godump-1.out "(?n)^const _ETV2 = 1$" } } */ 412 413 et_t et_v2; 414 /* { dg-final { scan-file godump-1.out "(?n)^var _et_v2 _et_t$" } } */ 415 416 417 /*** simple structs ***/ 418 typedef struct { } ts0e; 419 /* { dg-final { scan-file godump-1.out "(?n)^type _ts0e struct \{ \}$" } } */ 420 421 struct { } s0e; 422 /* { dg-final { scan-file godump-1.out "(?n)^var _s0e struct \{ \}$" } } */ 423 424 typedef struct { int8_t e1; } ts1e; 425 /* { dg-final { scan-file godump-1.out "(?n)^type _ts1e struct \{ e1 int8; \}$" } } */ 426 427 struct { int8_t e1; } s1e; 428 /* { dg-final { scan-file godump-1.out "(?n)^var _s1e struct \{ e1 int8; \}$" } } */ 429 430 typedef struct { int8_t e1; void *e2; } ts2el; 431 /* { dg-final { scan-file godump-1.out "(?n)^type _ts2el struct \{ e1 int8; e2 \\*byte; \}$" } } */ 432 433 struct { int8_t e1; void *e2; } s2el; 434 /* { dg-final { scan-file godump-1.out "(?n)^var _s2el struct \{ e1 int8; e2 \\*byte; \}$" } } */ 435 436 typedef struct { void *e1; int8_t e2; } ts2eg; 437 /* { dg-final { scan-file godump-1.out "(?n)^type _ts2eg struct \{ e1 \\*byte; e2 int8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 438 439 struct { void *e1; int8_t e2; } s2eg; 440 /* { dg-final { scan-file godump-1.out "(?n)^var _s2eg struct \{ e1 \\*byte; e2 int8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 441 442 typedef struct { int64_t l; int8_t c; int32_t i; int16_t s; } tsme; 443 /* { dg-final { scan-file godump-1.out "(?n)^type _tsme struct \{ l int64; c int8; i int32; s int16; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 444 445 struct { int64_t l; int8_t c; int32_t i; int16_t s; } sme; 446 /* { dg-final { scan-file godump-1.out "(?n)^var _sme struct \{ l int64; c int\8; i int32; s int16; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 447 448 typedef struct { int16_t sa[3]; int8_t ca[3]; } tsae; 449 /* { dg-final { scan-file godump-1.out "(?n)^type _tsae struct \{ sa \\\[2\\+1\\\]int16; ca \\\[2\\+1\\\]int8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 450 451 struct { int16_t sa[3]; int8_t ca[3]; } sae; 452 /* { dg-final { scan-file godump-1.out "(?n)^var _sae struct \{ sa \\\[2\\+1\\\]int16; ca \\\[2\\+1\\\]int8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 453 454 typedef struct { float f; } tsf_equiv; 455 /* { dg-final { scan-file godump-1.out "(?n)^type _tsf_equiv struct \{ f float\[0-9\]*; \}$" } } */ 456 457 struct { float f; } sf_equiv; 458 /* { dg-final { scan-file godump-1.out "(?n)^var _sf_equiv struct \{ f float\[0-9\]*; \}$" } } */ 459 460 typedef struct { float f; uint8_t : 0; } tsf_not_equiv; 461 /* { dg-final { scan-file godump-1.out "(?n)^type _tsf_not_equiv struct \{ f float\[0-9\]*; \}$" } } */ 462 463 struct { float f; uint8_t : 0; } sf_not_equiv; 464 /* { dg-final { scan-file godump-1.out "(?n)^var _sf_not_equiv struct \{ f float\[0-9\]*; \}$" } } */ 465 466 typedef struct { double d; } tsd_equiv; 467 /* { dg-final { scan-file godump-1.out "(?n)^type _tsd_equiv struct \{ d float\[0-9\]*; \}$" } } */ 468 469 struct { double d; } sd_equiv; 470 /* { dg-final { scan-file godump-1.out "(?n)^var _sd_equiv struct \{ d float\[0-9\]*; \}$" } } */ 471 472 typedef struct { double d; uint8_t : 0; } tsd_not_equiv; 473 /* { dg-final { scan-file godump-1.out "(?n)^type _tsd_not_equiv struct \{ d float\[0-9\]*; \}$" } } */ 474 475 struct { double d; uint8_t : 0; } sd_not_equiv; 476 /* { dg-final { scan-file godump-1.out "(?n)^var _sd_not_equiv struct \{ d float\[0-9\]*; \}$" } } */ 477 478 typedef struct s_undef_t s_undef_t2; 479 480 typedef struct s_fwd *s_fwd_p; 481 /* { dg-final { scan-file godump-1.out "(?n)^type _s_fwd_p \\*_s_fwd$" } } */ 482 483 struct s_fwd v_fwd; 484 /* { dg-final { scan-file godump-1.out "(?n)^var _v_fwd _s_fwd" } } */ 485 486 struct s_fwd { }; 487 /* { dg-final { scan-file godump-1.out "(?n)^type _s_fwd struct \{ \}$" } } */ 488 489 typedef struct s_t_idem_v1 {} s_t_idem_v1; 490 /* { dg-final { scan-file godump-1.out "(?n)^type _s_t_idem_v1 struct \{ \}$" } } */ 491 492 typedef struct s_t_idem_v2 s_t_idem_v2; 493 struct s_t_idem_v2 { }; 494 /* { dg-final { scan-file godump-1.out "(?n)^type _s_t_idem_v2 struct \{ \}$" } } */ 495 496 /*** nested structs ***/ 497 typedef struct { struct { uint8_t ca[3]; } s; uint32_t i; } tsn; 498 /* { dg-final { scan-file godump-1.out "(?n)^type _tsn struct \{ s struct \{ ca \\\[2\\+1\\\]uint8; \}; i uint32; \}$" } } */ 499 500 struct { struct { uint8_t ca[3]; } s; uint32_t i; } sn; 501 /* { dg-final { scan-file godump-1.out "(?n)^var _sn struct \{ s struct \{ ca \\\[2\\+1\\\]uint8; \}; i uint32; \}$" } } */ 502 503 typedef struct { struct { uint8_t a; uint16_t s; }; uint8_t b; } tsn_anon; 504 /* { dg-final { scan-file godump-1.out "(?n)^type _tsn_anon struct \{ a uint8; s uint16; b uint8; Godump_0_pad \\\[.\\\]byte; Godump_1_align \\\[0\\\]int16; \}$" } } */ 505 506 struct { struct { uint8_t a; uint16_t s; }; uint8_t b; } sn_anon; 507 /* { dg-final { scan-file godump-1.out "(?n)^var _sn_anon struct \{ a uint8; s uint16; b uint8; Godump_0_pad \\\[.\\\]byte; Godump_1_align \\\[0\\\]int16; \}$" } } */ 508 509 510 /*** structs with bitfields ***/ 511 typedef struct { uint8_t : 0; uint8_t c; } tsbf_anon_pad1; 512 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad1 struct \{ c uint8; \}$" } } */ 513 514 struct { uint8_t : 0; uint8_t c; } sbf_anon_pad1; 515 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad1 struct \{ c uint8; \}$" } } */ 516 517 typedef struct { uint8_t : 1; uint8_t c; } tsbf_anon_pad2; 518 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 519 520 struct { uint8_t : 1; uint8_t c; } sbf_anon_pad2; 521 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 522 523 typedef struct { uint8_t : 7; uint8_t c; } tsbf_anon_pad3; 524 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad3 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 525 526 struct { uint8_t : 7; uint8_t c; } sbf_anon_pad3; 527 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad3 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 528 529 typedef struct { uint8_t : 8; uint8_t c; } tsbf_anon_pad4; 530 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad4 struct \{ Godump_0 uint8; c uint8; \}$" } } */ 531 532 struct { uint8_t : 8; uint8_t c; } sbf_anon_pad4; 533 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad4 struct \{ Godump_0 uint8; c uint8; \}$" } } */ 534 535 typedef struct { uint64_t : 0; uint8_t c; } tsbf_anon_pad5; 536 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad5 struct \{ c uint8; \}$" } } */ 537 538 struct { uint64_t : 0; uint8_t c; } sbf_anon_pad5; 539 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad5 struct \{ c uint8; \}$" } } */ 540 541 typedef struct { uint64_t : 1; uint8_t c; } tsbf_anon_pad6; 542 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad6 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 543 544 struct { uint64_t : 1; uint8_t c; } sbf_anon_pad6; 545 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad6 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 546 547 typedef struct { uint64_t : 63; uint8_t c; } tsbf_anon_pad7; 548 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad7 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; \}$" } } */ 549 550 struct { uint64_t : 63; uint8_t c; } sbf_anon_pad7; 551 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad7 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; \}$" } } */ 552 553 typedef struct { uint64_t : 64; uint8_t c; } tsbf_anon_pad8; 554 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad8 struct \{ Godump_0 uint64; c uint8; \}$" } } */ 555 556 struct { uint64_t : 64; uint8_t c; } sbf_anon_pad8; 557 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad8 struct \{ Godump_0 uint64; c uint8; \}$" } } */ 558 559 typedef struct { uint8_t bf : 1; uint8_t c; } tsbf_pad8_1; 560 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad8_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 561 562 struct { uint8_t bf : 1; uint8_t c; } sbf_pad8_1; 563 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad8_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 564 565 typedef struct { uint8_t bf : 7; uint8_t c; } tsbf_pad8_2; 566 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad8_2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 567 568 struct { uint8_t bf : 7; uint8_t c; } sbf_pad8_2; 569 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad8_2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ 570 571 typedef struct { uint8_t bf : 8; uint8_t c; } tsbf_pad8_3; 572 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad8_3 struct \{ bf uint8; c uint8; \}$" } } */ 573 574 struct { uint8_t bf : 8; uint8_t c; } sbf_pad8_3; 575 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad8_3 struct \{ bf uint8; c uint8; \}$" } } */ 576 577 typedef struct { uint16_t bf : 1; uint8_t c; } tsbf_pad16_1; 578 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad16_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_align \\\[0\\\]int16; \}$" } } */ 579 580 struct { uint16_t bf : 1; uint8_t c; } sbf_pad16_1; 581 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad16_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_align \\\[0\\\]int16; \}$" } } */ 582 583 typedef struct { uint16_t bf : 15; uint8_t c; } tsbf_pad16_2; 584 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad16_2 struct \{ Godump_0_pad \\\[2\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int16; \}$" } } */ 585 586 struct { uint16_t bf : 15; uint8_t c; } sbf_pad16_2; 587 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad16_2 struct \{ Godump_0_pad \\\[2\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int16; \}$" } } */ 588 589 typedef struct { uint16_t bf : 16; uint8_t c; } tsbf_pad16_3; 590 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad16_3 struct \{ bf uint16; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 591 592 struct { uint16_t bf : 16; uint8_t c; } sbf_pad16_3; 593 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad16_3 struct \{ bf uint16; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 594 595 typedef struct { uint32_t bf : 1; uint8_t c; } tsbf_pad32_1; 596 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad32_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int32; \}$" } } */ 597 598 struct { uint32_t bf : 1; uint8_t c; } sbf_pad32_1; 599 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad32_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int32; \}$" } } */ 600 601 typedef struct { uint32_t bf : 31; uint8_t c; } tsbf_pad32_2; 602 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad32_2 struct \{ Godump_0_pad \\\[4\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int32; \}$" } } */ 603 604 struct { uint32_t bf : 31; uint8_t c; } sbf_pad32_2; 605 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad32_2 struct \{ Godump_0_pad \\\[4\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int32; \}$" } } */ 606 607 typedef struct { uint32_t bf : 32; uint8_t c; } tsbf_pad32_3; 608 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad32_3 struct \{ bf uint32; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 609 610 struct { uint32_t bf : 32; uint8_t c; } sbf_pad32_3; 611 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad32_3 struct \{ bf uint32; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 612 613 typedef struct { uint64_t bf : 1; uint8_t c; } tsbf_pad64_1; 614 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad64_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int64; \}$" } } */ 615 616 struct { uint64_t bf : 1; uint8_t c; } sbf_pad64_1; 617 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad64_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int64; \}$" } } */ 618 619 typedef struct { uint64_t bf : 63; uint8_t c; } tsbf_pad64_2; 620 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad64_2 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int64; \}$" } } */ 621 622 struct { uint64_t bf : 63; uint8_t c; } sbf_pad64_2; 623 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad64_2 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; Godump_2_align \\\[0\\\]int64; \}$" } } */ 624 625 typedef struct { uint64_t bf : 64; uint8_t c; } tsbf_pad64_3; 626 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad64_3 struct \{ bf uint\[0-9\]*; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 627 628 struct { uint64_t bf : 64; uint8_t c; } sbf_pad64_3; 629 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad64_3 struct \{ bf uint\[0-9\]*; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ 630 631 typedef struct { uint8_t b1 : 1; } tsbf_1b; 632 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_1b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */ 633 634 struct { uint8_t b1 : 1; } sbf_1b; 635 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_1b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */ 636 637 typedef struct 638 { 639 uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1; 640 uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1; 641 } tsbf_8b; 642 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_8b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */ 643 644 struct 645 { 646 uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1; 647 uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1; 648 } sbf_8b; 649 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_8b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */ 650 651 typedef struct { 652 uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1; 653 uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1; 654 uint8_t b9 : 1; 655 } tsbf_9b; 656 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_9b struct \{ Godump_0_pad \\\[2\\\]byte; \}$" } } */ 657 658 struct { 659 uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1; 660 uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1; 661 uint8_t b9 : 1; 662 } sbf_9b; 663 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_9b struct \{ Godump_0_pad \\\[2\\\]byte; \}$" } } */ 664 665 typedef struct { 666 uint8_t b1 : 7; uint8_t b2 : 7; uint8_t b3 : 2; 667 } tsbf_18b; 668 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_18b struct \{ Godump_0_pad \\\[3\\\]byte; \}$" } } */ 669 670 struct { 671 uint8_t b1 : 7; uint8_t b2 : 7; uint8_t b3 : 2; 672 } sbf_18b; 673 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_18b struct \{ Godump_0_pad \\\[3\\\]byte; \}$" } } */ 674 675 struct 676 { 677 uint16_t bf1 : 8; 678 uint8_t c; 679 uint16_t bf2 : 8; 680 uint32_t bf3 : 12; 681 uint16_t s; 682 } sbf_gaps; 683 /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_gaps struct \{ bf1 uint8; c uint8; bf2 uint8; Godump_0_pad \\\[2\\\]byte; s uint16; Godump_1_align \\\[0\\\]int32; \}$" } } */ 684 685 typedef struct 686 { 687 uint16_t bf1 : 8; 688 uint8_t c; 689 uint16_t bf2 : 8; 690 uint32_t bf3 : 12; 691 uint16_t s; 692 } tsbf_gaps; 693 /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_gaps struct \{ bf1 uint8; c uint8; bf2 uint8; Godump_0_pad \\\[2\\\]byte; s uint16; Godump_1_align \\\[0\\\]int32; \}$" } } */ 694 695 typedef struct 696 { 697 union 698 { 699 int64_t : 1; 700 union 701 { 702 int32_t bf : 1; 703 union 704 { 705 int16_t s; 706 int8_t c; 707 }; 708 }; 709 } u; 710 } ts_nested; 711 /* { dg-final { scan-file godump-1.out "(?n)^type _ts_nested struct \{ u struct \{ s int16; Godump_0_pad \\\[2\\\]byte; Godump_1_align \\\[0\\\]u?int32; \}; \}$" } } */ 712 713 struct 714 { 715 union 716 { 717 int64_t : 1; 718 union 719 { 720 int32_t bf : 1; 721 union 722 { 723 int16_t s; 724 int8_t c; 725 }; 726 }; 727 } u; 728 } s_nested; 729 /* { dg-final { scan-file godump-1.out "(?n)^var _s_nested struct \{ u struct \{ s int16; Godump_0_pad \\\[2\\\]byte; Godump_1_align \\\[0\\\]u?int32; \}; \}$" } } */ 730 731 typedef struct 732 { 733 struct 734 { 735 int64_t : 1; 736 struct 737 { 738 int32_t bf : 1; 739 struct 740 { 741 int16_t s; 742 int8_t c; 743 }; 744 }; 745 } u; 746 } ts_nested2; 747 /* { dg-final { scan-file godump-1.out "(?n)^type _ts_nested2 struct \{ u struct \{ Godump_0_pad \\\[4\\\]byte; Godump_1_pad \\\[2\\\]byte; s int16; c int8; Godump_2_pad \\\[1\\\]byte; Godump_3_pad \\\[2\\\]byte; Godump_4_align \\\[0\\\]u?int32; \}; \}$" } } */ 748 749 struct 750 { 751 struct 752 { 753 int64_t : 1; 754 struct 755 { 756 int32_t bf : 1; 757 struct 758 { 759 int16_t s; 760 int8_t c; 761 }; 762 }; 763 } u; 764 } s_nested2; 765 /* { dg-final { scan-file godump-1.out "(?n)^var _s_nested2 struct \{ u struct \{ Godump_0_pad \\\[4\\\]byte; Godump_1_pad \\\[2\\\]byte; s int16; c int8; Godump_2_pad \\\[1\\\]byte; Godump_3_pad \\\[2\\\]byte; Godump_4_align \\\[0\\\]u?int32; \}; \}$" } } */ 766 767 768 /*** unions ***/ 769 typedef union { } tue; 770 /* { dg-final { scan-file godump-1.out "(?n)^type _tue struct \{ \}$" } } */ 771 772 union { } ue; 773 /* { dg-final { scan-file godump-1.out "(?n)^var _ue struct \{ \}$" } } */ 774 775 typedef union u_t_idem_v1 { } u_t_idem_v1; 776 /* { dg-final { scan-file godump-1.out "(?n)^type _u_t_idem_v1 struct \{ \}$" } } */ 777 778 typedef union u_t_idem_v2 u_t_idem_v2; 779 union u_t_idem_v2 { }; 780 /* { dg-final { scan-file godump-1.out "(?n)^type _u_t_idem_v2 struct \{ \}$" } } */ 781 782 typedef union { uint8_t c; uint64_t l; } tu1; 783 /* { dg-final { scan-file godump-1.out "(?n)^type _tu1 struct \{ c uint8; Godump_0_pad \\\[.\\\]byte; Godump_1_align \\\[0\\\]u?int64; \}$" } } */ 784 785 union { uint8_t c; uint64_t l; } u1; 786 /* { dg-final { scan-file godump-1.out "(?n)^var _u1 struct \{ c uint8; Godump_0_pad \\\[.\\\]byte; Godump_1_align \\\[0\\\]u?int64; \}$" } } */ 787 788 typedef union { uint64_t l; uint8_t c; } tu2; 789 /* { dg-final { scan-file godump-1.out "(?n)^type _tu2 struct \{ l uint64; \}$" } } */ 790 791 union { uint64_t l; uint8_t c; } u2; 792 /* { dg-final { scan-file godump-1.out "(?n)^var _u2 struct \{ l uint64; \}$" } } */ 793 794 typedef union { uint64_t l[3]; uint8_t c; } tu3; 795 /* { dg-final { scan-file godump-1.out "(?n)^type _tu3 struct \{ l \\\[2\\+1\\\]uint64; \}$" } } */ 796 797 union { uint64_t l[3]; uint8_t c; } u3; 798 /* { dg-final { scan-file godump-1.out "(?n)^var _u3 struct \{ l \\\[2\\+1\\\]uint64; \}$" } } */ 799 800 typedef struct { union { uint8_t c; uint64_t l; }; } tsu_anon; 801 /* { dg-final { scan-file godump-1.out "(?n)^type _tsu_anon struct \{ c uint8; Godump_0_pad \\\[7\\\]byte; Godump_1_align \\\[0\\\]u?int64; \}$" } } */ 802 803 struct { union { uint8_t c; uint64_t l; }; } su_anon; 804 /* { dg-final { scan-file godump-1.out "(?n)^var _su_anon struct \{ c uint8; Godump_0_pad \\\[7\\\]byte; Godump_1_align \\\[0\\\]u?int64; \}$" } } */ 805 806 typedef union { uint64_t bf : 1; uint8_t ca[5]; } tu_size; 807 /* { dg-final { scan-file godump-1.out "(?n)^type _tu_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_pad \\\[.\\\]byte; Godump_1_align \\\[0\\\]u?int64; \}$" } } */ 808 809 union { uint64_t bf : 1; uint8_t ca[5]; } u_size; 810 /* { dg-final { scan-file godump-1.out "(?n)^var _u_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_pad \\\[.\\\]byte; Godump_1_align \\\[0\\\]u?int64; \}$" } } */ 811 812 typedef union { uint64_t : 1; uint8_t ca[5]; } tu2_size; 813 /* { dg-final { scan-file godump-1.out "(?n)^type _tu2_size struct \{ ca \\\[4\\+1\\\]uint8; \}$" } } */ 814 815 union { uint64_t : 1; uint8_t ca[5]; } u2_size; 816 /* { dg-final { scan-file godump-1.out "(?n)^var _u2_size struct \{ ca \\\[4\\+1\\\]uint8; \}$" } } */ 817 818 typedef union u_undef_t u_undef_t2; 819 820 typedef union { uint64_t b : 1; uint8_t ca[5]; } tu3_size; 821 /* { dg-final { scan-file godump-1.out "(?n)^type _tu3_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_pad \\\[.\\\]byte; Godump_1_align \\\[0\\\]u?int64; \}$" } } */ 822 823 union { uint64_t b : 1; uint8_t ca[5]; } u3_size; 824 /* { dg-final { scan-file godump-1.out "(?n)^var _u3_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_pad \\\[.\\\]byte; Godump_1_align \\\[0\\\]u?int64; \}$" } } */ 825 826 typedef union 827 { 828 union 829 { 830 int64_t : 1; 831 union 832 { 833 int32_t bf : 1; 834 union 835 { 836 int16_t s; 837 int8_t c; 838 }; 839 }; 840 } u; 841 } tu_nested; 842 /* { dg-final { scan-file godump-1.out "(?n)^type _tu_nested struct \{ u struct \{ s int16; Godump_0_pad \\\[2\\\]byte; Godump_1_align \\\[0\\\]u?int32; \}; \}$" } } */ 843 844 union 845 { 846 union 847 { 848 int64_t : 1; 849 union 850 { 851 int32_t bf : 1; 852 union 853 { 854 int16_t s; 855 int8_t c; 856 }; 857 }; 858 } u; 859 } u_nested; 860 /* { dg-final { scan-file godump-1.out "(?n)^var _u_nested struct \{ u struct \{ s int16; Godump_0_pad \\\[2\\\]byte; Godump_1_align \\\[0\\\]u?int32; \}; \}$" } } */ 861 862 typedef union 863 { 864 struct 865 { 866 int64_t : 1; 867 struct 868 { 869 int32_t bf : 1; 870 struct 871 { 872 int16_t s; 873 int8_t c; 874 }; 875 }; 876 } u; 877 } tu_nested2; 878 /* { dg-final { scan-file godump-1.out "(?n)^type _tu_nested2 struct \{ u struct \{ Godump_0_pad \\\[4\\\]byte; Godump_1_pad \\\[2\\\]byte; s int16; c int8; Godump_2_pad \\\[1\\\]byte; Godump_3_pad \\\[2\\\]byte; Godump_4_align \\\[0\\\]u?int32; \}; \}$" } } */ 879 880 union 881 { 882 struct 883 { 884 int64_t : 1; 885 struct 886 { 887 int32_t bf : 1; 888 struct 889 { 890 int16_t s; 891 int8_t c; 892 }; 893 }; 894 } u; 895 } u_nested2; 896 /* { dg-final { scan-file godump-1.out "(?n)^var _u_nested2 struct \{ u struct \{ Godump_0_pad \\\[4\\\]byte; Godump_1_pad \\\[2\\\]byte; s int16; c int8; Godump_2_pad \\\[1\\\]byte; Godump_3_pad \\\[2\\\]byte; Godump_4_align \\\[0\\\]u?int32; \}; \}$" } } */ 897 898 899 /*** functions ***/ 900 extern uint32_t func1(uint8_t c); 901 /* { dg-final { scan-file godump-1.out "(?n)^func _func1 \[(\]uint\[0-9\]*\[)\] uint\[0-9\]* __asm__\[(\]\"func1\"\[)\]$" } } */ 902 903 typedef int8_t (*func_t)(void *p); 904 /* { dg-final { scan-file godump-1.out "(?n)^type _func_t func\[(\]\\*byte\[)\] int\[0-9\]*$" } } */ 905 906 /* { dg-final { remove-build-file "godump-1.out" } } */ 907