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