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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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; _ \\\[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" } } */