| /* Test -fdump-go-specs option. */ |
| |
| /* { dg-options "-c -fdump-go-spec=godump-1.out" } */ |
| /* { dg-do compile } */ |
| /* { dg-skip-if "not supported for target" { ! "alpha*-*-* s390*-*-* i?86-*-* x86_64-*-*" } } */ |
| /* { dg-skip-if "not supported for target" { ! lp64 } } */ |
| |
| #include <stdint.h> |
| |
| /* Necessary quoting in the regexp patters: |
| |
| (?n) at beginning of pattern to make ^ and $ work. |
| " -> \" |
| *, + -> "*", "+" |
| [, ] -> "\[", "\]" |
| (, ) -> "\[(\]", "\[)\]" |
| {, } -> "\{", "\}" |
| */ |
| |
| /*** integer based types ***/ |
| typedef char c_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _c_t u?int8$" } } */ |
| |
| char c_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _c_v1 u?int\[0-9\]*$" } } */ |
| |
| c_t c_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _c_v2 _c_t$" } } */ |
| |
| typedef short s_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _s_t int\[0-9\]*$" } } */ |
| |
| short s_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _s_v1 int\[0-9\]*$" } } */ |
| |
| s_t s_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _s_v2 _s_t$" } } */ |
| |
| typedef int i_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _i_t int\[0-9\]*$" } } */ |
| |
| int i_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i_v1 int\[0-9\]*$" } } */ |
| |
| i_t i_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i_v2 _i_t$" } } */ |
| |
| typedef long l_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _l_t int\[0-9\]*$" } } */ |
| |
| long l_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _l_v1 int\[0-9\]*$" } } */ |
| |
| l_t l_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _l_v2 _l_t$" } } */ |
| |
| typedef long long ll_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ll_t int\[0-9\]*$" } } */ |
| |
| long long ll_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ll_v1 int\[0-9\]*$" } } */ |
| |
| ll_t ll_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ll_v2 _ll_t$" } } */ |
| |
| typedef unsigned char uc_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _uc_t uint8$" } } */ |
| |
| unsigned char uc_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _uc_v1 uint\[0-9\]*$" } } */ |
| |
| uc_t uc_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _uc_v2 _uc_t$" } } */ |
| |
| typedef unsigned short us_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _us_t uint\[0-9\]*$" } } */ |
| |
| unsigned short us_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _us_v1 uint\[0-9\]*$" } } */ |
| |
| us_t us_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _us_v2 _us_t$" } } */ |
| |
| typedef unsigned int ui_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ui_t uint\[0-9\]*$" } } */ |
| |
| unsigned int ui_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ui_v1 uint\[0-9\]*$" } } */ |
| |
| ui_t ui_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ui_v2 _ui_t$" } } */ |
| |
| typedef unsigned long ul_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ul_t uint\[0-9\]*$" } } */ |
| |
| unsigned long ul_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ul_v1 uint\[0-9\]*$" } } */ |
| |
| ul_t ul_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ul_v2 _ul_t$" } } */ |
| |
| typedef unsigned long long ull_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ull_t uint\[0-9\]*$" } } */ |
| |
| unsigned long long ull_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ull_v1 uint\[0-9\]*$" } } */ |
| |
| ull_t ull_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ull_v2 _ull_t$" } } */ |
| |
| typedef signed char sc_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _sc_t int8$" } } */ |
| |
| signed char sc_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sc_v1 int\[0-9\]*$" } } */ |
| |
| sc_t sc_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sc_v2 _sc_t$" } } */ |
| |
| typedef signed short ss_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ss_t int\[0-9\]*$" } } */ |
| |
| signed short ss_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ss_v1 int\[0-9\]*$" } } */ |
| |
| ss_t ss_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ss_v2 _ss_t$" } } */ |
| |
| typedef signed int si_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _si_t int\[0-9\]*$" } } */ |
| |
| signed int si_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _si_v1 int\[0-9\]*$" } } */ |
| |
| si_t si_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _si_v2 _si_t$" } } */ |
| |
| typedef signed long sl_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _sl_t int\[0-9\]*$" } } */ |
| |
| signed long sl_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sl_v1 int\[0-9\]*$" } } */ |
| |
| sl_t sl_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sl_v2 _sl_t$" } } */ |
| |
| typedef signed long long sll_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _sll_t int\[0-9\]*$" } } */ |
| |
| signed long long sll_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sll_v1 int\[0-9\]*$" } } */ |
| |
| sll_t sll_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sll_v2 _sll_t$" } } */ |
| |
| typedef int8_t i8_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _i8_t int8$" } } */ |
| |
| int8_t i8_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i8_v1 _int8_t$" } } */ |
| |
| i8_t i8_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i8_v2 _i8_t$" } } */ |
| |
| typedef int16_t i16_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _i16_t int16$" } } */ |
| |
| int16_t i16_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i16_v1 _int16_t$" } } */ |
| |
| i16_t i16_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i16_v2 _i16_t$" } } */ |
| |
| typedef int32_t i32_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _i32_t int32$" } } */ |
| |
| int32_t i32_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i32_v1 _int32_t$" } } */ |
| |
| i32_t i32_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i32_v2 _i32_t$" } } */ |
| |
| typedef int64_t i64_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _i64_t int64$" } } */ |
| |
| int64_t i64_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i64_v1 _int64_t$" } } */ |
| |
| i64_t i64_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _i64_v2 _i64_t$" } } */ |
| |
| typedef uint8_t ui8_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ui8_t uint8$" } } */ |
| |
| uint8_t ui8_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ui8_v1 _uint8_t$" } } */ |
| |
| ui8_t ui8_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ui8_v2 _ui8_t$" } } */ |
| |
| typedef uint16_t iu16_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _iu16_t uint16$" } } */ |
| |
| uint16_t iu16_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _iu16_v1 _uint16_t$" } } */ |
| |
| iu16_t iu16_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _iu16_v2 _iu16_t$" } } */ |
| |
| typedef uint32_t iu32_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _iu32_t uint32$" } } */ |
| |
| uint32_t iu32_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _iu32_v1 _uint32_t$" } } */ |
| |
| iu32_t iu32_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _iu32_v2 _iu32_t$" } } */ |
| |
| typedef uint64_t iu64_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _iu64_t uint64$" } } */ |
| |
| uint64_t iu64_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _iu64_v1 _uint64_t$" } } */ |
| |
| iu64_t iu64_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _iu64_v2 _iu64_t$" } } */ |
| |
| typedef const char cc_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _cc_t u?int8$" } } */ |
| |
| const char cc_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _cc_v1 u?int8$" } } */ |
| |
| cc_t cc_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _cc_v2 _cc_t$" } } */ |
| |
| |
| /*** pointer and array types ***/ |
| typedef void *vp_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _vp_t \\*byte$" } } */ |
| |
| void *vp_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _vp_v1 \\*byte$" } } */ |
| |
| vp_t vp_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _vp_v2 _vp_t$" } } */ |
| |
| typedef int **ipp_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ipp_t \\*\\*int\[0-9\]*$" } } */ |
| |
| int **ipp_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ipp_v1 \\*\\*int\[0-9\]*$" } } */ |
| |
| ipp_t ipp_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ipp_v2 _ipp_t$" } } */ |
| |
| typedef char ca_t[]; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ca_t \\\[0\\\]u?int8$" } } */ |
| |
| char ca_v1[]; /* { dg-warning "array 'ca_v1' assumed to have one element" } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ca_v1 \\\[0\\+1\\\]u?int8$" } } */ |
| |
| char ca_v1b[2]; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ca_v1b \\\[1\\+1\\\]u?int8$" } } */ |
| |
| ca_t ca_v2; /* { dg-warning "array 'ca_v2' assumed to have one element" } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ca_v2 \\\[0\\+1\\\]u?int8$" } } */ |
| |
| typedef short sa2_t[2]; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _sa2_t \\\[1\\+1\\\]int\[0-9\]*$" } } */ |
| |
| short sa2_v1[2]; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sa2_v1 \\\[1\\+1\\\]int\[0-9\]*$" } } */ |
| |
| sa2_t sa2_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sa2_v2 _sa2_t$" } } */ |
| |
| |
| /*** floating point types ***/ |
| typedef float f_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _f_t float\[0-9\]*$" } } */ |
| |
| float f_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _f_v1 float\[0-9\]*$" } } */ |
| |
| f_t f_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _f_v2 _f_t$" } } */ |
| |
| typedef double d_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _d_t float\[0-9\]*$" } } */ |
| |
| double d_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _d_v1 float\[0-9\]*$" } } */ |
| |
| d_t d_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _d_v2 _d_t$" } } */ |
| |
| typedef long double ld_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^// type _ld_t INVALID-float-\[0-9\]*$" } } */ |
| |
| long double ld_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^// var _ld_v1 INVALID-float-\[0-9\]*$" } } */ |
| |
| ld_t ld_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^// var _ld_v2 INVALID-float-\[0-9\]*$" } } */ |
| |
| /*** complex types ***/ |
| typedef _Complex cx_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _cx_t complex\[0-9\]*$" } } */ |
| |
| _Complex cx_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _cx_v1 complex\[0-9\]*$" } } */ |
| |
| cx_t cx_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _cx_v2 _cx_t$" } } */ |
| |
| typedef float _Complex fcx_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _fcx_t complex\[0-9\]*$" } } */ |
| |
| float _Complex fcx_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _fcx_v1 complex\[0-9\]*$" } } */ |
| |
| fcx_t fcx_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _fcx_v2 _fcx_t$" } } */ |
| |
| typedef double _Complex dcx_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _dcx_t complex\[0-9\]*$" } } */ |
| |
| double _Complex dcx_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _dcx_v1 complex\[0-9\]*$" } } */ |
| |
| dcx_t dcx_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _dcx_v2 _dcx_t$" } } */ |
| |
| typedef long double _Complex ldcx_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^// type _ldcx_t INVALID-complex-\[0-9\]*$" } } */ |
| |
| long double _Complex ldcx_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^// var _ldcx_v1 INVALID-complex-\[0-9\]*$" } } */ |
| |
| ldcx_t ldcx_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^// var _ldcx_v2 INVALID-complex-\[0-9\]*$" } } */ |
| |
| typedef int _Complex icx_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^// type _icx_t INVALID-complex-non-real$" } } */ |
| |
| int _Complex icx_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^// var _icx_v1 INVALID-complex-non-real$" } } */ |
| |
| icx_t icx_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^// var _icx_v2 INVALID-complex-non-real$" } } */ |
| |
| |
| /*** nested typedefs ***/ |
| typedef int32_t ni_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ni_t int32$" } } */ |
| |
| typedef ni_t ni2_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ni2_t int32$" } } */ |
| |
| ni2_t ni2_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ni2_v2 _ni2_t$" } } */ |
| |
| typedef ni2_t ni3_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ni3_t int32$" } } */ |
| |
| ni3_t ni3_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ni3_v2 _ni3_t$" } } */ |
| |
| |
| /*** enums ***/ |
| enum { E11 }; |
| /* { dg-final { scan-file godump-1.out "(?n)^const _E11 = 0$" } } */ |
| |
| enum { EV11 } e1_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _e1_v1 u?int\[0-9\]*$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _EV11 = 0$" } } */ |
| |
| enum { E21, E22 }; |
| /* { dg-final { scan-file godump-1.out "(?n)^const _E21 = 0$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _E22 = 1$" } } */ |
| |
| enum { EV21, EV22 } e2_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _e2_v1 u?int\[0-9\]*$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _EV21 = 0$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _EV22 = 1$" } } */ |
| |
| enum { EN1 = 3, EN2 = 77, EN3 = -1, EN4 }; |
| /* { dg-final { scan-file godump-1.out "(?n)^const _EN1 = 3$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _EN2 = 77$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _EN3 = -1$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _EN4 = 0$" } } */ |
| |
| typedef enum { ET1, ET2 } et_t; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _et_t u?int\[0-9\]*$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _ET1 = 0$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _ET2 = 1$" } } */ |
| |
| typedef enum e_t_idem_v1 { ETIV1 } e_t_idem_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _e_t_idem_v1 u?int\[0-9\]*$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _ETIV1 = 0$" } } */ |
| |
| typedef enum e_t_idem_v2 e_t_idem_v2; |
| enum e_t_idem_v2 { ETIV2 }; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _e_t_idem_v2 u?int\[0-9\]*$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _ETIV2 = 0$" } } */ |
| |
| enum { ETV1, ETV2 } et_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _et_v1 u?int\[0-9\]*$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _ETV1 = 0$" } } */ |
| /* { dg-final { scan-file godump-1.out "(?n)^const _ETV2 = 1$" } } */ |
| |
| et_t et_v2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _et_v2 _et_t$" } } */ |
| |
| |
| /*** simple structs ***/ |
| typedef struct { } ts0e; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ts0e struct \{ \}$" } } */ |
| |
| struct { } s0e; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _s0e struct \{ \}$" } } */ |
| |
| typedef struct { int8_t e1; } ts1e; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ts1e struct \{ e1 int8; \}$" } } */ |
| |
| struct { int8_t e1; } s1e; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _s1e struct \{ e1 int8; \}$" } } */ |
| |
| typedef struct { int8_t e1; void *e2; } ts2el; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ts2el struct \{ e1 int8; e2 \\*byte; \}$" } } */ |
| |
| struct { int8_t e1; void *e2; } s2el; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _s2el struct \{ e1 int8; e2 \\*byte; \}$" } } */ |
| |
| typedef struct { void *e1; int8_t e2; } ts2eg; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ts2eg struct \{ e1 \\*byte; e2 int8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| struct { void *e1; int8_t e2; } s2eg; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _s2eg struct \{ e1 \\*byte; e2 int8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| typedef struct { int64_t l; int8_t c; int32_t i; int16_t s; } tsme; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsme struct \{ l int64; c int8; i int32; s int16; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| struct { int64_t l; int8_t c; int32_t i; int16_t s; } sme; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sme struct \{ l int64; c int\8; i int32; s int16; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| typedef struct { int16_t sa[3]; int8_t ca[3]; } tsae; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsae struct \{ sa \\\[2\\+1\\\]int16; ca \\\[2\\+1\\\]int8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| struct { int16_t sa[3]; int8_t ca[3]; } sae; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sae struct \{ sa \\\[2\\+1\\\]int16; ca \\\[2\\+1\\\]int8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| typedef struct { float f; } tsf_equiv; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsf_equiv struct \{ f float\[0-9\]*; \}$" } } */ |
| |
| struct { float f; } sf_equiv; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sf_equiv struct \{ f float\[0-9\]*; \}$" } } */ |
| |
| typedef struct { float f; uint8_t : 0; } tsf_not_equiv; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsf_not_equiv struct \{ f float\[0-9\]*; \}$" } } */ |
| |
| struct { float f; uint8_t : 0; } sf_not_equiv; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sf_not_equiv struct \{ f float\[0-9\]*; \}$" } } */ |
| |
| typedef struct { double d; } tsd_equiv; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsd_equiv struct \{ d float\[0-9\]*; \}$" } } */ |
| |
| struct { double d; } sd_equiv; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sd_equiv struct \{ d float\[0-9\]*; \}$" } } */ |
| |
| typedef struct { double d; uint8_t : 0; } tsd_not_equiv; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsd_not_equiv struct \{ d float\[0-9\]*; \}$" } } */ |
| |
| struct { double d; uint8_t : 0; } sd_not_equiv; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sd_not_equiv struct \{ d float\[0-9\]*; \}$" } } */ |
| |
| typedef struct s_undef_t s_undef_t2; |
| |
| typedef struct s_fwd *s_fwd_p; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _s_fwd_p \\*_s_fwd$" } } */ |
| |
| struct s_fwd v_fwd; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _v_fwd _s_fwd" } } */ |
| |
| struct s_fwd { }; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _s_fwd struct \{ \}$" } } */ |
| |
| typedef struct s_t_idem_v1 {} s_t_idem_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _s_t_idem_v1 struct \{ \}$" } } */ |
| |
| typedef struct s_t_idem_v2 s_t_idem_v2; |
| struct s_t_idem_v2 { }; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _s_t_idem_v2 struct \{ \}$" } } */ |
| |
| /*** nested structs ***/ |
| typedef struct { struct { uint8_t ca[3]; } s; uint32_t i; } tsn; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsn struct \{ s struct \{ ca \\\[2\\+1\\\]uint8; \}; i uint32; \}$" } } */ |
| |
| struct { struct { uint8_t ca[3]; } s; uint32_t i; } sn; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sn struct \{ s struct \{ ca \\\[2\\+1\\\]uint8; \}; i uint32; \}$" } } */ |
| |
| typedef struct { struct { uint8_t a; uint16_t s; }; uint8_t b; } tsn_anon; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsn_anon struct \{ a uint8; s uint16; b uint8; Godump_0_pad \\\[.\\\]byte; _ \\\[0\\\]int16; \}$" } } */ |
| |
| struct { struct { uint8_t a; uint16_t s; }; uint8_t b; } sn_anon; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sn_anon struct \{ a uint8; s uint16; b uint8; Godump_0_pad \\\[.\\\]byte; _ \\\[0\\\]int16; \}$" } } */ |
| |
| |
| /*** structs with bitfields ***/ |
| typedef struct { uint8_t : 0; uint8_t c; } tsbf_anon_pad1; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad1 struct \{ c uint8; \}$" } } */ |
| |
| struct { uint8_t : 0; uint8_t c; } sbf_anon_pad1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad1 struct \{ c uint8; \}$" } } */ |
| |
| typedef struct { uint8_t : 1; uint8_t c; } tsbf_anon_pad2; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| struct { uint8_t : 1; uint8_t c; } sbf_anon_pad2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| typedef struct { uint8_t : 7; uint8_t c; } tsbf_anon_pad3; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad3 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| struct { uint8_t : 7; uint8_t c; } sbf_anon_pad3; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad3 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| typedef struct { uint8_t : 8; uint8_t c; } tsbf_anon_pad4; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad4 struct \{ Godump_0 uint8; c uint8; \}$" } } */ |
| |
| struct { uint8_t : 8; uint8_t c; } sbf_anon_pad4; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad4 struct \{ Godump_0 uint8; c uint8; \}$" } } */ |
| |
| typedef struct { uint64_t : 0; uint8_t c; } tsbf_anon_pad5; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad5 struct \{ c uint8; \}$" } } */ |
| |
| struct { uint64_t : 0; uint8_t c; } sbf_anon_pad5; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad5 struct \{ c uint8; \}$" } } */ |
| |
| typedef struct { uint64_t : 1; uint8_t c; } tsbf_anon_pad6; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad6 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| struct { uint64_t : 1; uint8_t c; } sbf_anon_pad6; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad6 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| typedef struct { uint64_t : 63; uint8_t c; } tsbf_anon_pad7; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad7 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; \}$" } } */ |
| |
| struct { uint64_t : 63; uint8_t c; } sbf_anon_pad7; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad7 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; \}$" } } */ |
| |
| typedef struct { uint64_t : 64; uint8_t c; } tsbf_anon_pad8; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad8 struct \{ Godump_0 uint64; c uint8; \}$" } } */ |
| |
| struct { uint64_t : 64; uint8_t c; } sbf_anon_pad8; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad8 struct \{ Godump_0 uint64; c uint8; \}$" } } */ |
| |
| typedef struct { uint8_t bf : 1; uint8_t c; } tsbf_pad8_1; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad8_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| struct { uint8_t bf : 1; uint8_t c; } sbf_pad8_1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad8_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| typedef struct { uint8_t bf : 7; uint8_t c; } tsbf_pad8_2; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad8_2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| struct { uint8_t bf : 7; uint8_t c; } sbf_pad8_2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad8_2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */ |
| |
| typedef struct { uint8_t bf : 8; uint8_t c; } tsbf_pad8_3; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad8_3 struct \{ bf uint8; c uint8; \}$" } } */ |
| |
| struct { uint8_t bf : 8; uint8_t c; } sbf_pad8_3; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad8_3 struct \{ bf uint8; c uint8; \}$" } } */ |
| |
| typedef struct { uint16_t bf : 1; uint8_t c; } tsbf_pad16_1; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad16_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; _ \\\[0\\\]int16; \}$" } } */ |
| |
| struct { uint16_t bf : 1; uint8_t c; } sbf_pad16_1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad16_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; _ \\\[0\\\]int16; \}$" } } */ |
| |
| typedef struct { uint16_t bf : 15; uint8_t c; } tsbf_pad16_2; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad16_2 struct \{ Godump_0_pad \\\[2\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int16; \}$" } } */ |
| |
| struct { uint16_t bf : 15; uint8_t c; } sbf_pad16_2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad16_2 struct \{ Godump_0_pad \\\[2\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int16; \}$" } } */ |
| |
| typedef struct { uint16_t bf : 16; uint8_t c; } tsbf_pad16_3; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad16_3 struct \{ bf uint16; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| struct { uint16_t bf : 16; uint8_t c; } sbf_pad16_3; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad16_3 struct \{ bf uint16; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| typedef struct { uint32_t bf : 1; uint8_t c; } tsbf_pad32_1; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad32_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int32; \}$" } } */ |
| |
| struct { uint32_t bf : 1; uint8_t c; } sbf_pad32_1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad32_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int32; \}$" } } */ |
| |
| typedef struct { uint32_t bf : 31; uint8_t c; } tsbf_pad32_2; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad32_2 struct \{ Godump_0_pad \\\[4\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int32; \}$" } } */ |
| |
| struct { uint32_t bf : 31; uint8_t c; } sbf_pad32_2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad32_2 struct \{ Godump_0_pad \\\[4\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int32; \}$" } } */ |
| |
| typedef struct { uint32_t bf : 32; uint8_t c; } tsbf_pad32_3; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad32_3 struct \{ bf uint32; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| struct { uint32_t bf : 32; uint8_t c; } sbf_pad32_3; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad32_3 struct \{ bf uint32; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| typedef struct { uint64_t bf : 1; uint8_t c; } tsbf_pad64_1; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad64_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int64; \}$" } } */ |
| |
| struct { uint64_t bf : 1; uint8_t c; } sbf_pad64_1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad64_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int64; \}$" } } */ |
| |
| typedef struct { uint64_t bf : 63; uint8_t c; } tsbf_pad64_2; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad64_2 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int64; \}$" } } */ |
| |
| struct { uint64_t bf : 63; uint8_t c; } sbf_pad64_2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad64_2 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; Godump_1_pad \\\[.\\\]byte; _ \\\[0\\\]int64; \}$" } } */ |
| |
| typedef struct { uint64_t bf : 64; uint8_t c; } tsbf_pad64_3; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad64_3 struct \{ bf uint\[0-9\]*; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| struct { uint64_t bf : 64; uint8_t c; } sbf_pad64_3; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad64_3 struct \{ bf uint\[0-9\]*; c uint8; Godump_0_pad \\\[.\\\]byte; \}$" } } */ |
| |
| typedef struct { uint8_t b1 : 1; } tsbf_1b; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_1b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */ |
| |
| struct { uint8_t b1 : 1; } sbf_1b; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_1b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */ |
| |
| typedef struct |
| { |
| uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1; |
| uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1; |
| } tsbf_8b; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_8b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */ |
| |
| struct |
| { |
| uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1; |
| uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1; |
| } sbf_8b; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_8b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */ |
| |
| typedef struct { |
| uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1; |
| uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1; |
| uint8_t b9 : 1; |
| } tsbf_9b; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_9b struct \{ Godump_0_pad \\\[2\\\]byte; \}$" } } */ |
| |
| struct { |
| uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1; |
| uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1; |
| uint8_t b9 : 1; |
| } sbf_9b; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_9b struct \{ Godump_0_pad \\\[2\\\]byte; \}$" } } */ |
| |
| typedef struct { |
| uint8_t b1 : 7; uint8_t b2 : 7; uint8_t b3 : 2; |
| } tsbf_18b; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_18b struct \{ Godump_0_pad \\\[3\\\]byte; \}$" } } */ |
| |
| struct { |
| uint8_t b1 : 7; uint8_t b2 : 7; uint8_t b3 : 2; |
| } sbf_18b; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_18b struct \{ Godump_0_pad \\\[3\\\]byte; \}$" } } */ |
| |
| struct |
| { |
| uint16_t bf1 : 8; |
| uint8_t c; |
| uint16_t bf2 : 8; |
| uint32_t bf3 : 12; |
| uint16_t s; |
| } sbf_gaps; |
| /* { 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; _ \\\[0\\\]int32; \}$" } } */ |
| |
| typedef struct |
| { |
| uint16_t bf1 : 8; |
| uint8_t c; |
| uint16_t bf2 : 8; |
| uint32_t bf3 : 12; |
| uint16_t s; |
| } tsbf_gaps; |
| /* { 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; _ \\\[0\\\]int32; \}$" } } */ |
| |
| typedef struct |
| { |
| union |
| { |
| int64_t : 1; |
| union |
| { |
| int32_t bf : 1; |
| union |
| { |
| int16_t s; |
| int8_t c; |
| }; |
| }; |
| } u; |
| } ts_nested; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _ts_nested struct \{ u struct \{ s int16; Godump_0_pad \\\[2\\\]byte; _ \\\[0\\\]u?int32; \}; \}$" } } */ |
| |
| struct |
| { |
| union |
| { |
| int64_t : 1; |
| union |
| { |
| int32_t bf : 1; |
| union |
| { |
| int16_t s; |
| int8_t c; |
| }; |
| }; |
| } u; |
| } s_nested; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _s_nested struct \{ u struct \{ s int16; Godump_0_pad \\\[2\\\]byte; _ \\\[0\\\]u?int32; \}; \}$" } } */ |
| |
| typedef struct |
| { |
| struct |
| { |
| int64_t : 1; |
| struct |
| { |
| int32_t bf : 1; |
| struct |
| { |
| int16_t s; |
| int8_t c; |
| }; |
| }; |
| } u; |
| } ts_nested2; |
| /* { 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; _ \\\[0\\\]u?int32; \}; \}$" } } */ |
| |
| struct |
| { |
| struct |
| { |
| int64_t : 1; |
| struct |
| { |
| int32_t bf : 1; |
| struct |
| { |
| int16_t s; |
| int8_t c; |
| }; |
| }; |
| } u; |
| } s_nested2; |
| /* { 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; _ \\\[0\\\]u?int32; \}; \}$" } } */ |
| |
| |
| /*** unions ***/ |
| typedef union { } tue; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tue struct \{ \}$" } } */ |
| |
| union { } ue; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _ue struct \{ \}$" } } */ |
| |
| typedef union u_t_idem_v1 { } u_t_idem_v1; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _u_t_idem_v1 struct \{ \}$" } } */ |
| |
| typedef union u_t_idem_v2 u_t_idem_v2; |
| union u_t_idem_v2 { }; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _u_t_idem_v2 struct \{ \}$" } } */ |
| |
| typedef union { uint8_t c; uint64_t l; } tu1; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tu1 struct \{ c uint8; Godump_0_pad \\\[.\\\]byte; _ \\\[0\\\]u?int64; \}$" } } */ |
| |
| union { uint8_t c; uint64_t l; } u1; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _u1 struct \{ c uint8; Godump_0_pad \\\[.\\\]byte; _ \\\[0\\\]u?int64; \}$" } } */ |
| |
| typedef union { uint64_t l; uint8_t c; } tu2; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tu2 struct \{ l uint64; \}$" } } */ |
| |
| union { uint64_t l; uint8_t c; } u2; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _u2 struct \{ l uint64; \}$" } } */ |
| |
| typedef union { uint64_t l[3]; uint8_t c; } tu3; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tu3 struct \{ l \\\[2\\+1\\\]uint64; \}$" } } */ |
| |
| union { uint64_t l[3]; uint8_t c; } u3; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _u3 struct \{ l \\\[2\\+1\\\]uint64; \}$" } } */ |
| |
| typedef struct { union { uint8_t c; uint64_t l; }; } tsu_anon; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tsu_anon struct \{ c uint8; Godump_0_pad \\\[7\\\]byte; _ \\\[0\\\]u?int64; \}$" } } */ |
| |
| struct { union { uint8_t c; uint64_t l; }; } su_anon; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _su_anon struct \{ c uint8; Godump_0_pad \\\[7\\\]byte; _ \\\[0\\\]u?int64; \}$" } } */ |
| |
| typedef union { uint64_t bf : 1; uint8_t ca[5]; } tu_size; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tu_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_pad \\\[.\\\]byte; _ \\\[0\\\]u?int64; \}$" } } */ |
| |
| union { uint64_t bf : 1; uint8_t ca[5]; } u_size; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _u_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_pad \\\[.\\\]byte; _ \\\[0\\\]u?int64; \}$" } } */ |
| |
| typedef union { uint64_t : 1; uint8_t ca[5]; } tu2_size; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tu2_size struct \{ ca \\\[4\\+1\\\]uint8; \}$" } } */ |
| |
| union { uint64_t : 1; uint8_t ca[5]; } u2_size; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _u2_size struct \{ ca \\\[4\\+1\\\]uint8; \}$" } } */ |
| |
| typedef union u_undef_t u_undef_t2; |
| |
| typedef union { uint64_t b : 1; uint8_t ca[5]; } tu3_size; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tu3_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_pad \\\[.\\\]byte; _ \\\[0\\\]u?int64; \}$" } } */ |
| |
| union { uint64_t b : 1; uint8_t ca[5]; } u3_size; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _u3_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_pad \\\[.\\\]byte; _ \\\[0\\\]u?int64; \}$" } } */ |
| |
| typedef union |
| { |
| union |
| { |
| int64_t : 1; |
| union |
| { |
| int32_t bf : 1; |
| union |
| { |
| int16_t s; |
| int8_t c; |
| }; |
| }; |
| } u; |
| } tu_nested; |
| /* { dg-final { scan-file godump-1.out "(?n)^type _tu_nested struct \{ u struct \{ s int16; Godump_0_pad \\\[2\\\]byte; _ \\\[0\\\]u?int32; \}; \}$" } } */ |
| |
| union |
| { |
| union |
| { |
| int64_t : 1; |
| union |
| { |
| int32_t bf : 1; |
| union |
| { |
| int16_t s; |
| int8_t c; |
| }; |
| }; |
| } u; |
| } u_nested; |
| /* { dg-final { scan-file godump-1.out "(?n)^var _u_nested struct \{ u struct \{ s int16; Godump_0_pad \\\[2\\\]byte; _ \\\[0\\\]u?int32; \}; \}$" } } */ |
| |
| typedef union |
| { |
| struct |
| { |
| int64_t : 1; |
| struct |
| { |
| int32_t bf : 1; |
| struct |
| { |
| int16_t s; |
| int8_t c; |
| }; |
| }; |
| } u; |
| } tu_nested2; |
| /* { 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; _ \\\[0\\\]u?int32; \}; \}$" } } */ |
| |
| union |
| { |
| struct |
| { |
| int64_t : 1; |
| struct |
| { |
| int32_t bf : 1; |
| struct |
| { |
| int16_t s; |
| int8_t c; |
| }; |
| }; |
| } u; |
| } u_nested2; |
| /* { 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; _ \\\[0\\\]u?int32; \}; \}$" } } */ |
| |
| |
| /*** functions ***/ |
| extern uint32_t func1(uint8_t c); |
| /* { dg-final { scan-file godump-1.out "(?n)^func _func1 \[(\]uint\[0-9\]*\[)\] uint\[0-9\]* __asm__\[(\]\"func1\"\[)\]$" } } */ |
| |
| typedef int8_t (*func_t)(void *p); |
| /* { dg-final { scan-file godump-1.out "(?n)^type _func_t func\[(\]\\*byte\[)\] int\[0-9\]*$" } } */ |
| |
| /* { dg-final { remove-build-file "godump-1.out" } } */ |