1 /* PR target/43139 */
2 /* { dg-do compile { target fpic } } */
3 /* { dg-options "-g -O2 -fpic" } */
4 
5 typedef double T1[10];
6 typedef double T2[10][10];
7 typedef int T3[10];
8 
9 void __attribute__((noinline))
fn1(void)10 fn1 (void)
11 {
12   asm volatile ("" : : : "memory");
13 }
14 
15 void __attribute__((noinline))
fn2(int x,...)16 fn2 (int x, ...)
17 {
18   asm volatile ("" : : "r" (x) : "memory");
19 }
20 
21 static void
bar(double v,double w,double x,double y,double z)22 bar (double v, double w, double x, double y, double z)
23 {
24   double a;
25   if (v / w < 200.0)
26     {
27       a = x + (y - x) * __builtin_exp (-v / w);
28       fn2 (0);
29       fn2 (1, a * 20.2 / z, z);
30       fn1 ();
31     }
32 }
33 
34 static void
baz(T2 u,T2 v,T2 t,T2 x,T1 y,T3 z,double q,int j,int k)35 baz (T2 u, T2 v, T2 t, T2 x, T1 y, T3 z, double q, int j, int k)
36 {
37   int i = z[k];
38   if (u[i][j] > 0.0)
39     bar (q, x[i][j], v[i][j], t[i][j], y[i]);
40 }
41 
42 static T2 a, b, c, d;
43 static T1 e;
44 static T3 f;
45 
46 void __attribute__((noinline))
test(int j,int k,double q)47 test (int j, int k, double q)
48 {
49   baz (a, b, c, d, e, f, q, j, k);
50 }
51 
52 int
main(void)53 main (void)
54 {
55   d[0][6] = 1.0;
56   a[0][6] = 2.0;
57   test (6, 7, 400.0);
58   return 0;
59 }
60