PR target/81988
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / target-6.C
blob8dbafb0437bd4cab64c2235cf5c6e6b343dde1ce
1 extern "C" void abort (void);
2 struct S { int s, t; };
4 void
5 foo (int &x, int &y, S &u, S &v, double &s, double &t)
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 ();
56 int
57 main ()
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;