1/* { dg-do compile } */
2/* { dg-options "-march=armv7-a -mfloat-abi=hard -mfpu=neon -O2" } */
3
4#define BUF 100
5long a[BUF];
6
7typedef unsigned int size_t;
8typedef unsigned int wchar_t;
9void *memset (void *s, int c, size_t n);
10struct printf_info
11{
12  int prec;
13  int width;
14  wchar_t spec;
15  unsigned int is_long_double:1;
16  unsigned int is_short:1;
17  unsigned int is_long:1;
18  unsigned int alt:1;
19  unsigned int space:1;
20  unsigned int left:1;
21  unsigned int showsign:1;
22  unsigned int group:1;
23  unsigned int extra:1;
24  unsigned int is_char:1;
25  unsigned int wide:1;
26  unsigned int i18n:1;
27  unsigned int __pad:4;
28  unsigned short int user;
29  wchar_t pad;
30};
31
32void bar (int *alt, int *space, int *left, int *showsign,
33	  int *group,
34	  int *is_long_double,
35	  int *is_short,
36	  int *is_long,
37	  int *width,
38	  int *prec,
39	  int *use_outdigits,
40	  unsigned int *pad,
41	  wchar_t *spec);
42void __printf_fp (char *s, struct printf_info *pinfo);
43int foo(char *s)
44{
45  int alt = 0;
46  int space = 0;
47  int left = 0;
48  int showsign = 0;
49  int group = 0;
50  int is_long_double = 0;
51  int is_short = 0;
52  int is_long = 0;
53  int width = 0;
54  int prec = -1;
55  int use_outdigits = 0;
56  unsigned int pad = L' ';
57  wchar_t spec;
58
59  bar (&alt, &space, &left, &showsign, &group, &is_long_double,
60       &is_short, &is_long, &width, &prec, &use_outdigits, &pad, &spec);
61
62  a[1] = a[0] + a[2] + a[3] + a[4] + a[5] + a[6];
63  a[2] = a[1] + a[3] + a[5] + a[5] + a[6] + a[7];
64  a[3] = a[2] + a[5] + a[7] + a[6] + a[7] + a[8];
65  a[4] = a[3] + a[7] + a[11] + a[7] + a[8] + a[9];
66  a[5] = a[5] + a[11] + a[13] + a[8] + a[9] + a[10];
67  a[6] = a[7] + a[13] + a[17] + a[9] + a[10] + a[11];
68  a[7] = a[11] + a[17] + a[19] + a[10] + a[11] + a[12];
69  a[8] = a[17] + a[19] + a[23] + a[29] + a[31] + a[37];
70
71  {
72    struct printf_info info;
73    memset (&info, 0, sizeof (struct printf_info));
74    info.prec = prec;
75    info.width = width;
76    info.spec = spec;
77    info.is_long_double = is_long_double;
78    info.is_short = is_short;
79    info.is_long = is_long;
80    info.alt = alt;
81    info.space = space;
82    info.left = left;
83    info.showsign = showsign;
84    info.group = group;
85    info.pad = pad;
86    info.extra = 0;
87    info.i18n = use_outdigits;
88    info.wide = sizeof (wchar_t) != 1;
89
90    __printf_fp (s, &info);
91  }
92
93  return 0;
94}
95
96