godump-1.c 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. /* Test -fdump-go-specs option. */
  2. /* { dg-options "-c -fdump-go-spec=godump-1.out" } */
  3. /* { dg-do compile } */
  4. /* { dg-skip-if "not supported for target" { ! "alpha*-*-* s390*-*-* i?86-*-* x86_64-*-*" } } */
  5. /* { dg-skip-if "not supported for target" { ! lp64 } } */
  6. #include <stdint.h>
  7. /* Necessary quoting in the regexp patters:
  8. (?n) at beginning of pattern to make ^ and $ work.
  9. " -> \"
  10. *, + -> "*", "+"
  11. [, ] -> "\[", "\]"
  12. (, ) -> "\[(\]", "\[)\]"
  13. {, } -> "\{", "\}"
  14. */
  15. /*** integer based types ***/
  16. typedef char c_t;
  17. /* { dg-final { scan-file godump-1.out "(?n)^type _c_t u?int8$" } } */
  18. char c_v1;
  19. /* { dg-final { scan-file godump-1.out "(?n)^var _c_v1 u?int\[0-9\]*$" } } */
  20. c_t c_v2;
  21. /* { dg-final { scan-file godump-1.out "(?n)^var _c_v2 _c_t$" } } */
  22. typedef short s_t;
  23. /* { dg-final { scan-file godump-1.out "(?n)^type _s_t int\[0-9\]*$" } } */
  24. short s_v1;
  25. /* { dg-final { scan-file godump-1.out "(?n)^var _s_v1 int\[0-9\]*$" } } */
  26. s_t s_v2;
  27. /* { dg-final { scan-file godump-1.out "(?n)^var _s_v2 _s_t$" } } */
  28. typedef int i_t;
  29. /* { dg-final { scan-file godump-1.out "(?n)^type _i_t int\[0-9\]*$" } } */
  30. int i_v1;
  31. /* { dg-final { scan-file godump-1.out "(?n)^var _i_v1 int\[0-9\]*$" } } */
  32. i_t i_v2;
  33. /* { dg-final { scan-file godump-1.out "(?n)^var _i_v2 _i_t$" } } */
  34. typedef long l_t;
  35. /* { dg-final { scan-file godump-1.out "(?n)^type _l_t int\[0-9\]*$" } } */
  36. long l_v1;
  37. /* { dg-final { scan-file godump-1.out "(?n)^var _l_v1 int\[0-9\]*$" } } */
  38. l_t l_v2;
  39. /* { dg-final { scan-file godump-1.out "(?n)^var _l_v2 _l_t$" } } */
  40. typedef long long ll_t;
  41. /* { dg-final { scan-file godump-1.out "(?n)^type _ll_t int\[0-9\]*$" } } */
  42. long long ll_v1;
  43. /* { dg-final { scan-file godump-1.out "(?n)^var _ll_v1 int\[0-9\]*$" } } */
  44. ll_t ll_v2;
  45. /* { dg-final { scan-file godump-1.out "(?n)^var _ll_v2 _ll_t$" } } */
  46. typedef unsigned char uc_t;
  47. /* { dg-final { scan-file godump-1.out "(?n)^type _uc_t uint8$" } } */
  48. unsigned char uc_v1;
  49. /* { dg-final { scan-file godump-1.out "(?n)^var _uc_v1 uint\[0-9\]*$" } } */
  50. uc_t uc_v2;
  51. /* { dg-final { scan-file godump-1.out "(?n)^var _uc_v2 _uc_t$" } } */
  52. typedef unsigned short us_t;
  53. /* { dg-final { scan-file godump-1.out "(?n)^type _us_t uint\[0-9\]*$" } } */
  54. unsigned short us_v1;
  55. /* { dg-final { scan-file godump-1.out "(?n)^var _us_v1 uint\[0-9\]*$" } } */
  56. us_t us_v2;
  57. /* { dg-final { scan-file godump-1.out "(?n)^var _us_v2 _us_t$" } } */
  58. typedef unsigned int ui_t;
  59. /* { dg-final { scan-file godump-1.out "(?n)^type _ui_t uint\[0-9\]*$" } } */
  60. unsigned int ui_v1;
  61. /* { dg-final { scan-file godump-1.out "(?n)^var _ui_v1 uint\[0-9\]*$" } } */
  62. ui_t ui_v2;
  63. /* { dg-final { scan-file godump-1.out "(?n)^var _ui_v2 _ui_t$" } } */
  64. typedef unsigned long ul_t;
  65. /* { dg-final { scan-file godump-1.out "(?n)^type _ul_t uint\[0-9\]*$" } } */
  66. unsigned long ul_v1;
  67. /* { dg-final { scan-file godump-1.out "(?n)^var _ul_v1 uint\[0-9\]*$" } } */
  68. ul_t ul_v2;
  69. /* { dg-final { scan-file godump-1.out "(?n)^var _ul_v2 _ul_t$" } } */
  70. typedef unsigned long long ull_t;
  71. /* { dg-final { scan-file godump-1.out "(?n)^type _ull_t uint\[0-9\]*$" } } */
  72. unsigned long long ull_v1;
  73. /* { dg-final { scan-file godump-1.out "(?n)^var _ull_v1 uint\[0-9\]*$" } } */
  74. ull_t ull_v2;
  75. /* { dg-final { scan-file godump-1.out "(?n)^var _ull_v2 _ull_t$" } } */
  76. typedef signed char sc_t;
  77. /* { dg-final { scan-file godump-1.out "(?n)^type _sc_t int8$" } } */
  78. signed char sc_v1;
  79. /* { dg-final { scan-file godump-1.out "(?n)^var _sc_v1 int\[0-9\]*$" } } */
  80. sc_t sc_v2;
  81. /* { dg-final { scan-file godump-1.out "(?n)^var _sc_v2 _sc_t$" } } */
  82. typedef signed short ss_t;
  83. /* { dg-final { scan-file godump-1.out "(?n)^type _ss_t int\[0-9\]*$" } } */
  84. signed short ss_v1;
  85. /* { dg-final { scan-file godump-1.out "(?n)^var _ss_v1 int\[0-9\]*$" } } */
  86. ss_t ss_v2;
  87. /* { dg-final { scan-file godump-1.out "(?n)^var _ss_v2 _ss_t$" } } */
  88. typedef signed int si_t;
  89. /* { dg-final { scan-file godump-1.out "(?n)^type _si_t int\[0-9\]*$" } } */
  90. signed int si_v1;
  91. /* { dg-final { scan-file godump-1.out "(?n)^var _si_v1 int\[0-9\]*$" } } */
  92. si_t si_v2;
  93. /* { dg-final { scan-file godump-1.out "(?n)^var _si_v2 _si_t$" } } */
  94. typedef signed long sl_t;
  95. /* { dg-final { scan-file godump-1.out "(?n)^type _sl_t int\[0-9\]*$" } } */
  96. signed long sl_v1;
  97. /* { dg-final { scan-file godump-1.out "(?n)^var _sl_v1 int\[0-9\]*$" } } */
  98. sl_t sl_v2;
  99. /* { dg-final { scan-file godump-1.out "(?n)^var _sl_v2 _sl_t$" } } */
  100. typedef signed long long sll_t;
  101. /* { dg-final { scan-file godump-1.out "(?n)^type _sll_t int\[0-9\]*$" } } */
  102. signed long long sll_v1;
  103. /* { dg-final { scan-file godump-1.out "(?n)^var _sll_v1 int\[0-9\]*$" } } */
  104. sll_t sll_v2;
  105. /* { dg-final { scan-file godump-1.out "(?n)^var _sll_v2 _sll_t$" } } */
  106. typedef int8_t i8_t;
  107. /* { dg-final { scan-file godump-1.out "(?n)^type _i8_t int8$" } } */
  108. int8_t i8_v1;
  109. /* { dg-final { scan-file godump-1.out "(?n)^var _i8_v1 _int8_t$" } } */
  110. i8_t i8_v2;
  111. /* { dg-final { scan-file godump-1.out "(?n)^var _i8_v2 _i8_t$" } } */
  112. typedef int16_t i16_t;
  113. /* { dg-final { scan-file godump-1.out "(?n)^type _i16_t int16$" } } */
  114. int16_t i16_v1;
  115. /* { dg-final { scan-file godump-1.out "(?n)^var _i16_v1 _int16_t$" } } */
  116. i16_t i16_v2;
  117. /* { dg-final { scan-file godump-1.out "(?n)^var _i16_v2 _i16_t$" } } */
  118. typedef int32_t i32_t;
  119. /* { dg-final { scan-file godump-1.out "(?n)^type _i32_t int32$" } } */
  120. int32_t i32_v1;
  121. /* { dg-final { scan-file godump-1.out "(?n)^var _i32_v1 _int32_t$" } } */
  122. i32_t i32_v2;
  123. /* { dg-final { scan-file godump-1.out "(?n)^var _i32_v2 _i32_t$" } } */
  124. typedef int64_t i64_t;
  125. /* { dg-final { scan-file godump-1.out "(?n)^type _i64_t int64$" } } */
  126. int64_t i64_v1;
  127. /* { dg-final { scan-file godump-1.out "(?n)^var _i64_v1 _int64_t$" } } */
  128. i64_t i64_v2;
  129. /* { dg-final { scan-file godump-1.out "(?n)^var _i64_v2 _i64_t$" } } */
  130. typedef uint8_t ui8_t;
  131. /* { dg-final { scan-file godump-1.out "(?n)^type _ui8_t uint8$" } } */
  132. uint8_t ui8_v1;
  133. /* { dg-final { scan-file godump-1.out "(?n)^var _ui8_v1 _uint8_t$" } } */
  134. ui8_t ui8_v2;
  135. /* { dg-final { scan-file godump-1.out "(?n)^var _ui8_v2 _ui8_t$" } } */
  136. typedef uint16_t iu16_t;
  137. /* { dg-final { scan-file godump-1.out "(?n)^type _iu16_t uint16$" } } */
  138. uint16_t iu16_v1;
  139. /* { dg-final { scan-file godump-1.out "(?n)^var _iu16_v1 _uint16_t$" } } */
  140. iu16_t iu16_v2;
  141. /* { dg-final { scan-file godump-1.out "(?n)^var _iu16_v2 _iu16_t$" } } */
  142. typedef uint32_t iu32_t;
  143. /* { dg-final { scan-file godump-1.out "(?n)^type _iu32_t uint32$" } } */
  144. uint32_t iu32_v1;
  145. /* { dg-final { scan-file godump-1.out "(?n)^var _iu32_v1 _uint32_t$" } } */
  146. iu32_t iu32_v2;
  147. /* { dg-final { scan-file godump-1.out "(?n)^var _iu32_v2 _iu32_t$" } } */
  148. typedef uint64_t iu64_t;
  149. /* { dg-final { scan-file godump-1.out "(?n)^type _iu64_t uint64$" } } */
  150. uint64_t iu64_v1;
  151. /* { dg-final { scan-file godump-1.out "(?n)^var _iu64_v1 _uint64_t$" } } */
  152. iu64_t iu64_v2;
  153. /* { dg-final { scan-file godump-1.out "(?n)^var _iu64_v2 _iu64_t$" } } */
  154. typedef const char cc_t;
  155. /* { dg-final { scan-file godump-1.out "(?n)^type _cc_t u?int8$" } } */
  156. const char cc_v1;
  157. /* { dg-final { scan-file godump-1.out "(?n)^var _cc_v1 u?int8$" } } */
  158. cc_t cc_v2;
  159. /* { dg-final { scan-file godump-1.out "(?n)^var _cc_v2 _cc_t$" } } */
  160. /*** pointer and array types ***/
  161. typedef void *vp_t;
  162. /* { dg-final { scan-file godump-1.out "(?n)^type _vp_t \\*byte$" } } */
  163. void *vp_v1;
  164. /* { dg-final { scan-file godump-1.out "(?n)^var _vp_v1 \\*byte$" } } */
  165. vp_t vp_v2;
  166. /* { dg-final { scan-file godump-1.out "(?n)^var _vp_v2 _vp_t$" } } */
  167. typedef int **ipp_t;
  168. /* { dg-final { scan-file godump-1.out "(?n)^type _ipp_t \\*\\*int\[0-9\]*$" } } */
  169. int **ipp_v1;
  170. /* { dg-final { scan-file godump-1.out "(?n)^var _ipp_v1 \\*\\*int\[0-9\]*$" } } */
  171. ipp_t ipp_v2;
  172. /* { dg-final { scan-file godump-1.out "(?n)^var _ipp_v2 _ipp_t$" } } */
  173. typedef char ca_t[];
  174. /* { dg-final { scan-file godump-1.out "(?n)^type _ca_t \\\[0\\\]u?int8$" } } */
  175. char ca_v1[]; /* { dg-warning "array 'ca_v1' assumed to have one element" } */
  176. /* { dg-final { scan-file godump-1.out "(?n)^var _ca_v1 \\\[0\\+1\\\]u?int8$" } } */
  177. char ca_v1b[2];
  178. /* { dg-final { scan-file godump-1.out "(?n)^var _ca_v1b \\\[1\\+1\\\]u?int8$" } } */
  179. ca_t ca_v2; /* { dg-warning "array 'ca_v2' assumed to have one element" } */
  180. /* { dg-final { scan-file godump-1.out "(?n)^var _ca_v2 \\\[0\\+1\\\]u?int8$" } } */
  181. typedef short sa2_t[2];
  182. /* { dg-final { scan-file godump-1.out "(?n)^type _sa2_t \\\[1\\+1\\\]int\[0-9\]*$" } } */
  183. short sa2_v1[2];
  184. /* { dg-final { scan-file godump-1.out "(?n)^var _sa2_v1 \\\[1\\+1\\\]int\[0-9\]*$" } } */
  185. sa2_t sa2_v2;
  186. /* { dg-final { scan-file godump-1.out "(?n)^var _sa2_v2 _sa2_t$" } } */
  187. /*** floating point types ***/
  188. typedef float f_t;
  189. /* { dg-final { scan-file godump-1.out "(?n)^type _f_t float\[0-9\]*$" } } */
  190. float f_v1;
  191. /* { dg-final { scan-file godump-1.out "(?n)^var _f_v1 float\[0-9\]*$" } } */
  192. f_t f_v2;
  193. /* { dg-final { scan-file godump-1.out "(?n)^var _f_v2 _f_t$" } } */
  194. typedef double d_t;
  195. /* { dg-final { scan-file godump-1.out "(?n)^type _d_t float\[0-9\]*$" } } */
  196. double d_v1;
  197. /* { dg-final { scan-file godump-1.out "(?n)^var _d_v1 float\[0-9\]*$" } } */
  198. d_t d_v2;
  199. /* { dg-final { scan-file godump-1.out "(?n)^var _d_v2 _d_t$" } } */
  200. typedef long double ld_t;
  201. /* { dg-final { scan-file godump-1.out "(?n)^// type _ld_t INVALID-float-\[0-9\]*$" } } */
  202. long double ld_v1;
  203. /* { dg-final { scan-file godump-1.out "(?n)^// var _ld_v1 INVALID-float-\[0-9\]*$" } } */
  204. ld_t ld_v2;
  205. /* { dg-final { scan-file godump-1.out "(?n)^// var _ld_v2 INVALID-float-\[0-9\]*$" } } */
  206. /*** complex types ***/
  207. typedef _Complex cx_t;
  208. /* { dg-final { scan-file godump-1.out "(?n)^type _cx_t complex\[0-9\]*$" } } */
  209. _Complex cx_v1;
  210. /* { dg-final { scan-file godump-1.out "(?n)^var _cx_v1 complex\[0-9\]*$" } } */
  211. cx_t cx_v2;
  212. /* { dg-final { scan-file godump-1.out "(?n)^var _cx_v2 _cx_t$" } } */
  213. typedef float _Complex fcx_t;
  214. /* { dg-final { scan-file godump-1.out "(?n)^type _fcx_t complex\[0-9\]*$" } } */
  215. float _Complex fcx_v1;
  216. /* { dg-final { scan-file godump-1.out "(?n)^var _fcx_v1 complex\[0-9\]*$" } } */
  217. fcx_t fcx_v2;
  218. /* { dg-final { scan-file godump-1.out "(?n)^var _fcx_v2 _fcx_t$" } } */
  219. typedef double _Complex dcx_t;
  220. /* { dg-final { scan-file godump-1.out "(?n)^type _dcx_t complex\[0-9\]*$" } } */
  221. double _Complex dcx_v1;
  222. /* { dg-final { scan-file godump-1.out "(?n)^var _dcx_v1 complex\[0-9\]*$" } } */
  223. dcx_t dcx_v2;
  224. /* { dg-final { scan-file godump-1.out "(?n)^var _dcx_v2 _dcx_t$" } } */
  225. typedef long double _Complex ldcx_t;
  226. /* { dg-final { scan-file godump-1.out "(?n)^// type _ldcx_t INVALID-complex-\[0-9\]*$" } } */
  227. long double _Complex ldcx_v1;
  228. /* { dg-final { scan-file godump-1.out "(?n)^// var _ldcx_v1 INVALID-complex-\[0-9\]*$" } } */
  229. ldcx_t ldcx_v2;
  230. /* { dg-final { scan-file godump-1.out "(?n)^// var _ldcx_v2 INVALID-complex-\[0-9\]*$" } } */
  231. typedef int _Complex icx_t;
  232. /* { dg-final { scan-file godump-1.out "(?n)^// type _icx_t INVALID-complex-non-real$" } } */
  233. int _Complex icx_v1;
  234. /* { dg-final { scan-file godump-1.out "(?n)^// var _icx_v1 INVALID-complex-non-real$" } } */
  235. icx_t icx_v2;
  236. /* { dg-final { scan-file godump-1.out "(?n)^// var _icx_v2 INVALID-complex-non-real$" } } */
  237. /*** nested typedefs ***/
  238. typedef int32_t ni_t;
  239. /* { dg-final { scan-file godump-1.out "(?n)^type _ni_t int32$" } } */
  240. typedef ni_t ni2_t;
  241. /* { dg-final { scan-file godump-1.out "(?n)^type _ni2_t int32$" } } */
  242. ni2_t ni2_v2;
  243. /* { dg-final { scan-file godump-1.out "(?n)^var _ni2_v2 _ni2_t$" } } */
  244. typedef ni2_t ni3_t;
  245. /* { dg-final { scan-file godump-1.out "(?n)^type _ni3_t int32$" } } */
  246. ni3_t ni3_v2;
  247. /* { dg-final { scan-file godump-1.out "(?n)^var _ni3_v2 _ni3_t$" } } */
  248. /*** enums ***/
  249. enum { E11 };
  250. /* { dg-final { scan-file godump-1.out "(?n)^const _E11 = 0$" } } */
  251. enum { EV11 } e1_v1;
  252. /* { dg-final { scan-file godump-1.out "(?n)^var _e1_v1 int$" } } */
  253. /* { dg-final { scan-file godump-1.out "(?n)^const _EV11 = 0$" } } */
  254. enum { E21, E22 };
  255. /* { dg-final { scan-file godump-1.out "(?n)^const _E21 = 0$" } } */
  256. /* { dg-final { scan-file godump-1.out "(?n)^const _E22 = 1$" } } */
  257. enum { EV21, EV22 } e2_v1;
  258. /* { dg-final { scan-file godump-1.out "(?n)^var _e2_v1 int$" } } */
  259. /* { dg-final { scan-file godump-1.out "(?n)^const _EV21 = 0$" } } */
  260. /* { dg-final { scan-file godump-1.out "(?n)^const _EV22 = 1$" } } */
  261. enum { EN1 = 3, EN2 = 77, EN3 = -1, EN4 };
  262. /* { dg-final { scan-file godump-1.out "(?n)^const _EN1 = 3$" } } */
  263. /* { dg-final { scan-file godump-1.out "(?n)^const _EN2 = 77$" } } */
  264. /* { dg-final { scan-file godump-1.out "(?n)^const _EN3 = -1$" } } */
  265. /* { dg-final { scan-file godump-1.out "(?n)^const _EN4 = 0$" } } */
  266. typedef enum { ET1, ET2 } et_t;
  267. /* { dg-final { scan-file godump-1.out "(?n)^type _et_t int$" } } */
  268. /* { dg-final { scan-file godump-1.out "(?n)^const _ET1 = 0$" } } */
  269. /* { dg-final { scan-file godump-1.out "(?n)^const _ET2 = 1$" } } */
  270. enum { ETV1, ETV2 } et_v1;
  271. /* { dg-final { scan-file godump-1.out "(?n)^var _et_v1 int$" } } */
  272. /* { dg-final { scan-file godump-1.out "(?n)^const _ETV1 = 0$" } } */
  273. /* { dg-final { scan-file godump-1.out "(?n)^const _ETV2 = 1$" } } */
  274. et_t et_v2;
  275. /* { dg-final { scan-file godump-1.out "(?n)^var _et_v2 _et_t$" } } */
  276. /*** simple structs ***/
  277. typedef struct { } ts0e;
  278. /* { dg-final { scan-file godump-1.out "(?n)^type _ts0e struct \{ \}$" } } */
  279. struct { } s0e;
  280. /* { dg-final { scan-file godump-1.out "(?n)^var _s0e struct \{ \}$" } } */
  281. typedef struct { int8_t e1; } ts1e;
  282. /* { dg-final { scan-file godump-1.out "(?n)^type _ts1e struct \{ e1 int8; \}$" } } */
  283. struct { int8_t e1; } s1e;
  284. /* { dg-final { scan-file godump-1.out "(?n)^var _s1e struct \{ e1 int8; \}$" } } */
  285. typedef struct { int8_t e1; void *e2; } ts2el;
  286. /* { dg-final { scan-file godump-1.out "(?n)^type _ts2el struct \{ e1 int8; e2 \\*byte; \}$" } } */
  287. struct { int8_t e1; void *e2; } s2el;
  288. /* { dg-final { scan-file godump-1.out "(?n)^var _s2el struct \{ e1 int8; e2 \\*byte; \}$" } } */
  289. typedef struct { void *e1; int8_t e2; } ts2eg;
  290. /* { dg-final { scan-file godump-1.out "(?n)^type _ts2eg struct \{ e1 \\*byte; e2 int8; \}$" } } */
  291. struct { void *e1; int8_t e2; } s2eg;
  292. /* { dg-final { scan-file godump-1.out "(?n)^var _s2eg struct \{ e1 \\*byte; e2 int8; \}$" } } */
  293. typedef struct { int64_t l; int8_t c; int32_t i; int16_t s; } tsme;
  294. /* { dg-final { scan-file godump-1.out "(?n)^type _tsme struct \{ l int64; c int8; i int32; s int16; \}$" } } */
  295. struct { int64_t l; int8_t c; int32_t i; int16_t s; } sme;
  296. /* { dg-final { scan-file godump-1.out "(?n)^var _sme struct \{ l int64; c int\8; i int32; s int16; \}$" } } */
  297. typedef struct { int16_t sa[3]; int8_t ca[3]; } tsae;
  298. /* { dg-final { scan-file godump-1.out "(?n)^type _tsae struct \{ sa \\\[2\\+1\\\]int16; ca \\\[2\\+1\\\]int8; \}$" } } */
  299. struct { int16_t sa[3]; int8_t ca[3]; } sae;
  300. /* { dg-final { scan-file godump-1.out "(?n)^var _sae struct \{ sa \\\[2\\+1\\\]int16; ca \\\[2\\+1\\\]int8; \}$" } } */
  301. typedef struct { float f; } tsf_equiv;
  302. /* { dg-final { scan-file godump-1.out "(?n)^type _tsf_equiv struct \{ f float\[0-9\]*; \}$" } } */
  303. struct { float f; } sf_equiv;
  304. /* { dg-final { scan-file godump-1.out "(?n)^var _sf_equiv struct \{ f float\[0-9\]*; \}$" } } */
  305. typedef struct { float f; uint8_t : 0; } tsf_not_equiv;
  306. /* { dg-final { scan-file godump-1.out "(?n)^type _tsf_not_equiv struct \{ f float\[0-9\]*; \}$" } } */
  307. struct { float f; uint8_t : 0; } sf_not_equiv;
  308. /* { dg-final { scan-file godump-1.out "(?n)^var _sf_not_equiv struct \{ f float\[0-9\]*; \}$" } } */
  309. typedef struct { double d; } tsd_equiv;
  310. /* { dg-final { scan-file godump-1.out "(?n)^type _tsd_equiv struct \{ d float\[0-9\]*; \}$" } } */
  311. struct { double d; } sd_equiv;
  312. /* { dg-final { scan-file godump-1.out "(?n)^var _sd_equiv struct \{ d float\[0-9\]*; \}$" } } */
  313. typedef struct { double d; uint8_t : 0; } tsd_not_equiv;
  314. /* { dg-final { scan-file godump-1.out "(?n)^type _tsd_not_equiv struct \{ d float\[0-9\]*; \}$" } } */
  315. struct { double d; uint8_t : 0; } sd_not_equiv;
  316. /* { dg-final { scan-file godump-1.out "(?n)^var _sd_not_equiv struct \{ d float\[0-9\]*; \}$" } } */
  317. typedef struct s_undef_t s_undef_t2;
  318. /*** nested structs ***/
  319. typedef struct { struct { uint8_t ca[3]; } s; uint32_t i; } tsn;
  320. /* { dg-final { scan-file godump-1.out "(?n)^type _tsn struct \{ s struct \{ ca \\\[2\\+1\\\]uint8; \}; i uint32; \}$" } } */
  321. struct { struct { uint8_t ca[3]; } s; uint32_t i; } sn;
  322. /* { dg-final { scan-file godump-1.out "(?n)^var _sn struct \{ s struct \{ ca \\\[2\\+1\\\]uint8; \}; i uint32; \}$" } } */
  323. typedef struct { struct { uint8_t a; uint16_t s; }; uint8_t b; } tsn_anon;
  324. /* { dg-final { scan-file godump-1.out "(?n)^type _tsn_anon struct \{ a uint8; s uint16; b uint8; Godump_0_align \\\[0\\\]int16; \}$" } } */
  325. struct { struct { uint8_t a; uint16_t s; }; uint8_t b; } sn_anon;
  326. /* { dg-final { scan-file godump-1.out "(?n)^var _sn_anon struct \{ a uint8; s uint16; b uint8; Godump_0_align \\\[0\\\]int16; \}$" } } */
  327. /*** structs with bitfields ***/
  328. typedef struct { uint8_t : 0; uint8_t c; } tsbf_anon_pad1;
  329. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad1 struct \{ c uint8; \}$" } } */
  330. struct { uint8_t : 0; uint8_t c; } sbf_anon_pad1;
  331. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad1 struct \{ c uint8; \}$" } } */
  332. typedef struct { uint8_t : 1; uint8_t c; } tsbf_anon_pad2;
  333. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  334. struct { uint8_t : 1; uint8_t c; } sbf_anon_pad2;
  335. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  336. typedef struct { uint8_t : 7; uint8_t c; } tsbf_anon_pad3;
  337. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad3 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  338. struct { uint8_t : 7; uint8_t c; } sbf_anon_pad3;
  339. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad3 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  340. typedef struct { uint8_t : 8; uint8_t c; } tsbf_anon_pad4;
  341. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad4 struct \{ Godump_0 uint8; c uint8; \}$" } } */
  342. struct { uint8_t : 8; uint8_t c; } sbf_anon_pad4;
  343. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad4 struct \{ Godump_0 uint8; c uint8; \}$" } } */
  344. typedef struct { uint64_t : 0; uint8_t c; } tsbf_anon_pad5;
  345. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad5 struct \{ c uint8; \}$" } } */
  346. struct { uint64_t : 0; uint8_t c; } sbf_anon_pad5;
  347. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad5 struct \{ c uint8; \}$" } } */
  348. typedef struct { uint64_t : 1; uint8_t c; } tsbf_anon_pad6;
  349. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad6 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  350. struct { uint64_t : 1; uint8_t c; } sbf_anon_pad6;
  351. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad6 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  352. typedef struct { uint64_t : 63; uint8_t c; } tsbf_anon_pad7;
  353. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad7 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; \}$" } } */
  354. struct { uint64_t : 63; uint8_t c; } sbf_anon_pad7;
  355. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad7 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; \}$" } } */
  356. typedef struct { uint64_t : 64; uint8_t c; } tsbf_anon_pad8;
  357. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_anon_pad8 struct \{ Godump_0 uint64; c uint8; \}$" } } */
  358. struct { uint64_t : 64; uint8_t c; } sbf_anon_pad8;
  359. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_anon_pad8 struct \{ Godump_0 uint64; c uint8; \}$" } } */
  360. typedef struct { uint8_t bf : 1; uint8_t c; } tsbf_pad8_1;
  361. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad8_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  362. struct { uint8_t bf : 1; uint8_t c; } sbf_pad8_1;
  363. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad8_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  364. typedef struct { uint8_t bf : 7; uint8_t c; } tsbf_pad8_2;
  365. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad8_2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  366. struct { uint8_t bf : 7; uint8_t c; } sbf_pad8_2;
  367. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad8_2 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; \}$" } } */
  368. typedef struct { uint8_t bf : 8; uint8_t c; } tsbf_pad8_3;
  369. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad8_3 struct \{ bf uint8; c uint8; \}$" } } */
  370. struct { uint8_t bf : 8; uint8_t c; } sbf_pad8_3;
  371. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad8_3 struct \{ bf uint8; c uint8; \}$" } } */
  372. typedef struct { uint16_t bf : 1; uint8_t c; } tsbf_pad16_1;
  373. /* { 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; \}$" } } */
  374. struct { uint16_t bf : 1; uint8_t c; } sbf_pad16_1;
  375. /* { 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; \}$" } } */
  376. typedef struct { uint16_t bf : 15; uint8_t c; } tsbf_pad16_2;
  377. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad16_2 struct \{ Godump_0_pad \\\[2\\\]byte; c uint8; Godump_1_align \\\[0\\\]int16; \}$" } } */
  378. struct { uint16_t bf : 15; uint8_t c; } sbf_pad16_2;
  379. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad16_2 struct \{ Godump_0_pad \\\[2\\\]byte; c uint8; Godump_1_align \\\[0\\\]int16; \}$" } } */
  380. typedef struct { uint16_t bf : 16; uint8_t c; } tsbf_pad16_3;
  381. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad16_3 struct \{ bf uint16; c uint8; \}$" } } */
  382. struct { uint16_t bf : 16; uint8_t c; } sbf_pad16_3;
  383. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad16_3 struct \{ bf uint16; c uint8; \}$" } } */
  384. typedef struct { uint32_t bf : 1; uint8_t c; } tsbf_pad32_1;
  385. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad32_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_align \\\[0\\\]int32; \}$" } } */
  386. struct { uint32_t bf : 1; uint8_t c; } sbf_pad32_1;
  387. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad32_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_align \\\[0\\\]int32; \}$" } } */
  388. typedef struct { uint32_t bf : 31; uint8_t c; } tsbf_pad32_2;
  389. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad32_2 struct \{ Godump_0_pad \\\[4\\\]byte; c uint8; Godump_1_align \\\[0\\\]int32; \}$" } } */
  390. struct { uint32_t bf : 31; uint8_t c; } sbf_pad32_2;
  391. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad32_2 struct \{ Godump_0_pad \\\[4\\\]byte; c uint8; Godump_1_align \\\[0\\\]int32; \}$" } } */
  392. typedef struct { uint32_t bf : 32; uint8_t c; } tsbf_pad32_3;
  393. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad32_3 struct \{ bf uint32; c uint8; \}$" } } */
  394. struct { uint32_t bf : 32; uint8_t c; } sbf_pad32_3;
  395. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad32_3 struct \{ bf uint32; c uint8; \}$" } } */
  396. typedef struct { uint64_t bf : 1; uint8_t c; } tsbf_pad64_1;
  397. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad64_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_align \\\[0\\\]int64; \}$" } } */
  398. struct { uint64_t bf : 1; uint8_t c; } sbf_pad64_1;
  399. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad64_1 struct \{ Godump_0_pad \\\[1\\\]byte; c uint8; Godump_1_align \\\[0\\\]int64; \}$" } } */
  400. typedef struct { uint64_t bf : 63; uint8_t c; } tsbf_pad64_2;
  401. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad64_2 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; Godump_1_align \\\[0\\\]int64; \}$" } } */
  402. struct { uint64_t bf : 63; uint8_t c; } sbf_pad64_2;
  403. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad64_2 struct \{ Godump_0_pad \\\[8\\\]byte; c uint8; Godump_1_align \\\[0\\\]int64; \}$" } } */
  404. typedef struct { uint64_t bf : 64; uint8_t c; } tsbf_pad64_3;
  405. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_pad64_3 struct \{ bf uint\[0-9\]*; c uint8; \}$" } } */
  406. struct { uint64_t bf : 64; uint8_t c; } sbf_pad64_3;
  407. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_pad64_3 struct \{ bf uint\[0-9\]*; c uint8; \}$" } } */
  408. typedef struct { uint8_t b1 : 1; } tsbf_1b;
  409. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_1b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */
  410. struct { uint8_t b1 : 1; } sbf_1b;
  411. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_1b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */
  412. typedef struct
  413. {
  414. uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1;
  415. uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1;
  416. } tsbf_8b;
  417. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_8b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */
  418. struct
  419. {
  420. uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1;
  421. uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1;
  422. } sbf_8b;
  423. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_8b struct \{ Godump_0_pad \\\[1\\\]byte; \}$" } } */
  424. typedef struct {
  425. uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1;
  426. uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1;
  427. uint8_t b9 : 1;
  428. } tsbf_9b;
  429. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_9b struct \{ Godump_0_pad \\\[2\\\]byte; \}$" } } */
  430. struct {
  431. uint8_t b1 : 1; uint8_t b2 : 1; uint8_t b3 : 1; uint8_t b4 : 1;
  432. uint8_t b5 : 1; uint8_t b6 : 1; uint8_t b7 : 1; uint8_t b8 : 1;
  433. uint8_t b9 : 1;
  434. } sbf_9b;
  435. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_9b struct \{ Godump_0_pad \\\[2\\\]byte; \}$" } } */
  436. typedef struct {
  437. uint8_t b1 : 7; uint8_t b2 : 7; uint8_t b3 : 2;
  438. } tsbf_18b;
  439. /* { dg-final { scan-file godump-1.out "(?n)^type _tsbf_18b struct \{ Godump_0_pad \\\[3\\\]byte; \}$" } } */
  440. struct {
  441. uint8_t b1 : 7; uint8_t b2 : 7; uint8_t b3 : 2;
  442. } sbf_18b;
  443. /* { dg-final { scan-file godump-1.out "(?n)^var _sbf_18b struct \{ Godump_0_pad \\\[3\\\]byte; \}$" } } */
  444. struct
  445. {
  446. uint16_t bf1 : 8;
  447. uint8_t c;
  448. uint16_t bf2 : 8;
  449. uint32_t bf3 : 12;
  450. uint16_t s;
  451. } sbf_gaps;
  452. /* { 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; \}$" } } */
  453. typedef struct
  454. {
  455. uint16_t bf1 : 8;
  456. uint8_t c;
  457. uint16_t bf2 : 8;
  458. uint32_t bf3 : 12;
  459. uint16_t s;
  460. } tsbf_gaps;
  461. /* { 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; \}$" } } */
  462. typedef struct
  463. {
  464. union
  465. {
  466. int64_t : 1;
  467. union
  468. {
  469. int32_t bf : 1;
  470. union
  471. {
  472. int16_t s;
  473. int8_t c;
  474. };
  475. };
  476. } u;
  477. } ts_nested;
  478. /* { 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; \}; \}$" } } */
  479. struct
  480. {
  481. union
  482. {
  483. int64_t : 1;
  484. union
  485. {
  486. int32_t bf : 1;
  487. union
  488. {
  489. int16_t s;
  490. int8_t c;
  491. };
  492. };
  493. } u;
  494. } s_nested;
  495. /* { 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; \}; \}$" } } */
  496. typedef struct
  497. {
  498. struct
  499. {
  500. int64_t : 1;
  501. struct
  502. {
  503. int32_t bf : 1;
  504. struct
  505. {
  506. int16_t s;
  507. int8_t c;
  508. };
  509. };
  510. } u;
  511. } ts_nested2;
  512. /* { 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; \}; \}$" } } */
  513. struct
  514. {
  515. struct
  516. {
  517. int64_t : 1;
  518. struct
  519. {
  520. int32_t bf : 1;
  521. struct
  522. {
  523. int16_t s;
  524. int8_t c;
  525. };
  526. };
  527. } u;
  528. } s_nested2;
  529. /* { 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; \}; \}$" } } */
  530. /*** unions ***/
  531. typedef union { } tue;
  532. /* { dg-final { scan-file godump-1.out "(?n)^type _tue struct \{ \}$" } } */
  533. union { } ue;
  534. /* { dg-final { scan-file godump-1.out "(?n)^var _ue struct \{ \}$" } } */
  535. typedef union { uint8_t c; uint64_t l; } tu1;
  536. /* { dg-final { scan-file godump-1.out "(?n)^type _tu1 struct \{ c uint8; Godump_0_align \\\[0\\\]u?int64; \}$" } } */
  537. union { uint8_t c; uint64_t l; } u1;
  538. /* { dg-final { scan-file godump-1.out "(?n)^var _u1 struct \{ c uint8; Godump_0_align \\\[0\\\]u?int64; \}$" } } */
  539. typedef union { uint64_t l; uint8_t c; } tu2;
  540. /* { dg-final { scan-file godump-1.out "(?n)^type _tu2 struct \{ l uint64; \}$" } } */
  541. union { uint64_t l; uint8_t c; } u2;
  542. /* { dg-final { scan-file godump-1.out "(?n)^var _u2 struct \{ l uint64; \}$" } } */
  543. typedef union { uint64_t l[3]; uint8_t c; } tu3;
  544. /* { dg-final { scan-file godump-1.out "(?n)^type _tu3 struct \{ l \\\[2\\+1\\\]uint64; \}$" } } */
  545. union { uint64_t l[3]; uint8_t c; } u3;
  546. /* { dg-final { scan-file godump-1.out "(?n)^var _u3 struct \{ l \\\[2\\+1\\\]uint64; \}$" } } */
  547. typedef struct { union { uint8_t c; uint64_t l; }; } tsu_anon;
  548. /* { 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; \}$" } } */
  549. struct { union { uint8_t c; uint64_t l; }; } su_anon;
  550. /* { 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; \}$" } } */
  551. typedef union { uint64_t bf : 1; uint8_t ca[5]; } tu_size;
  552. /* { dg-final { scan-file godump-1.out "(?n)^type _tu_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_align \\\[0\\\]u?int64; \}$" } } */
  553. union { uint64_t bf : 1; uint8_t ca[5]; } u_size;
  554. /* { dg-final { scan-file godump-1.out "(?n)^var _u_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_align \\\[0\\\]u?int64; \}$" } } */
  555. typedef union { uint64_t : 1; uint8_t ca[5]; } tu2_size;
  556. /* { dg-final { scan-file godump-1.out "(?n)^type _tu2_size struct \{ ca \\\[4\\+1\\\]uint8; \}$" } } */
  557. union { uint64_t : 1; uint8_t ca[5]; } u2_size;
  558. /* { dg-final { scan-file godump-1.out "(?n)^var _u2_size struct \{ ca \\\[4\\+1\\\]uint8; \}$" } } */
  559. typedef union u_undef_t u_undef_t2;
  560. typedef union { uint64_t b : 1; uint8_t ca[5]; } tu3_size;
  561. /* { dg-final { scan-file godump-1.out "(?n)^type _tu3_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_align \\\[0\\\]u?int64; \}$" } } */
  562. union { uint64_t b : 1; uint8_t ca[5]; } u3_size;
  563. /* { dg-final { scan-file godump-1.out "(?n)^var _u3_size struct \{ ca \\\[4\\+1\\\]uint8; Godump_0_align \\\[0\\\]u?int64; \}$" } } */
  564. typedef union
  565. {
  566. union
  567. {
  568. int64_t : 1;
  569. union
  570. {
  571. int32_t bf : 1;
  572. union
  573. {
  574. int16_t s;
  575. int8_t c;
  576. };
  577. };
  578. } u;
  579. } tu_nested;
  580. /* { 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; \}; \}$" } } */
  581. union
  582. {
  583. union
  584. {
  585. int64_t : 1;
  586. union
  587. {
  588. int32_t bf : 1;
  589. union
  590. {
  591. int16_t s;
  592. int8_t c;
  593. };
  594. };
  595. } u;
  596. } u_nested;
  597. /* { 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; \}; \}$" } } */
  598. typedef union
  599. {
  600. struct
  601. {
  602. int64_t : 1;
  603. struct
  604. {
  605. int32_t bf : 1;
  606. struct
  607. {
  608. int16_t s;
  609. int8_t c;
  610. };
  611. };
  612. } u;
  613. } tu_nested2;
  614. /* { 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; \}; \}$" } } */
  615. union
  616. {
  617. struct
  618. {
  619. int64_t : 1;
  620. struct
  621. {
  622. int32_t bf : 1;
  623. struct
  624. {
  625. int16_t s;
  626. int8_t c;
  627. };
  628. };
  629. } u;
  630. } u_nested2;
  631. /* { 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; \}; \}$" } } */
  632. /*** functions ***/
  633. extern uint32_t func1(uint8_t c);
  634. /* { dg-final { scan-file godump-1.out "(?n)^func _func1 \[(\]uint\[0-9\]*\[)\] uint\[0-9\]* __asm__\[(\]\"func1\"\[)\]$" } } */
  635. typedef int8_t (*func_t)(void *p);
  636. /* { dg-final { scan-file godump-1.out "(?n)^type _func_t func\[(\]\\*byte\[)\] int\[0-9\]*$" } } */
  637. /* { dg-final { remove-build-file "godump-1.out" } } */