1 /* { dg-require-effective-target indirect_calls } */
2
3 typedef struct { short x[4]; } S;
4 typedef struct { unsigned int a, b, c; S *d; } T;
5
6 S *(*foo) (T *, int, int, int, int);
7 unsigned short *(*bar)(const T *);
8 unsigned short baz(T *,const int);
9
die(void)10 T *die (void)
11 {
12 typedef struct { unsigned int a, b, e; double f, g; } U;
13
14 char h[8], i[2053], j[2053];
15 double k, l, m;
16 U n;
17 T *o;
18 unsigned short p;
19 int q, r;
20 long s;
21 unsigned short *t;
22 S *u;
23 unsigned char *v, *w;
24 unsigned int x;
25
26 o = 0;
27 for (x = 0; x < n.e; x++)
28 {
29 l = 1.0;
30 if (n.g - n.f <= 1.0)
31 l = ((1 << o->c) - 1) / (n.g - n.f);
32 v = w;
33 for (r = o->b - 1; r >= 0; r--)
34 {
35 u = foo (o, 0, r, o->a, 1);
36 if (!u)
37 break;
38 t = bar (o);
39 for (q = 0; q < (int) o->a; q++)
40 {
41 h[0] = *v;
42 s = *v++;
43 k = (double) s;
44 m = l*k;
45 p = m < 0 ? 0 : m > (1 << o->c) - 1 ? (1 << o->c) - 1 : m + 0.5;
46 p = baz (o,p);
47 t[q] = p;
48 *u++ = o->d[p];
49 }
50 }
51 }
52 return o;
53 }
54