1 extern "C" void abort (void);
2 struct S { int s, t; };
3
4 void
foo(int & x,int & y,S & u,S & v,double & s,double & t)5 foo (int &x, int &y, S &u, S &v, double &s, double &t)
6 {
7 int err = 0, i;
8 int a[y - 2], b[y - 2];
9 int (&c)[y - 2] = a, (&d)[y - 2] = b;
10 for (i = 0; i < y - 2; i++)
11 {
12 c[i] = i;
13 d[i] = 3 + i;
14 }
15 #pragma omp target private (x, u, s, c, i) firstprivate (y, v, t, d) map(from:err)
16 {
17 x = y;
18 u = v;
19 s = t;
20 for (i = 0; i < y - 2; i++)
21 c[i] = d[i];
22 err = (x != 6 || y != 6
23 || u.s != 9 || u.t != 10 || v.s != 9 || v.t != 10
24 || s != 12.5 || t != 12.5);
25 for (i = 0; i < y - 2; i++)
26 if (d[i] != 3 + i || c[i] != 3 + i)
27 err = 1;
28 else
29 {
30 c[i] += 2 * i;
31 d[i] += i;
32 }
33 x += 1;
34 y += 2;
35 u.s += 3;
36 v.t += 4;
37 s += 2.5;
38 t += 3.0;
39 if (x != 7 || y != 8
40 || u.s != 12 || u.t != 10 || v.s != 9 || v.t != 14
41 || s != 15.0 || t != 15.5)
42 err = 1;
43 for (i = 0; i < y - 4; i++)
44 if (d[i] != 3 + 2 * i || c[i] != 3 + 3 * i)
45 err = 1;
46 }
47 if (err || x != 5 || y != 6
48 || u.s != 7 || u.t != 8 || v.s != 9 || v.t != 10
49 || s != 11.5 || t != 12.5)
50 abort ();
51 for (i = 0; i < y - 2; i++)
52 if (d[i] != 3 + i || c[i] != i)
53 abort ();
54 }
55
56 int
main()57 main ()
58 {
59 int x = 5, y = 6;
60 S u = { 7, 8 }, v = { 9, 10 };
61 double s = 11.5, t = 12.5;
62 foo (x, y, u, v, s, t);
63 return 0;
64 }
65