Daily bump.
[gcc-git-mirror.git] / libgomp / testsuite / libgomp.c++ / target-11.C
blob87c2980b4b5bfe603779e7b617f69bc6f7b806d5
1 extern "C" void abort ();
2 struct T { int a; int *b; int c; char (&d)[10]; };
3 struct S { int *s; char *u; T v; short *w; short *&x; };
4 volatile int z;
6 template <typename A, typename B, typename C, typename D>
7 void
8 foo ()
10   A d[10];
11   B *e;
12   C a[32], i;
13   A b[32];
14   B c[32];
15   for (i = 0; i < 32; i++)
16     {
17       a[i] = i;
18       b[i] = 32 + i;
19       c[i] = 64 + i;
20     }
21   for (i = 0; i < 10; i++)
22     d[i] = 17 + i;
23   e = c + 18;
24   D s = { a, b + 2, { 0, a + 16, 0, d }, c + 3, e };
25   int err = 0;
26   #pragma omp target map (to: s.v.b, s.v.b[0:z + 7])                    \
27                      map (s.template u, s.template u[z + 1:z + 4])      \
28                      map (tofrom: s.s, s.s[3:3])                        \
29                      map (tofrom: s. template v. template d[z + 1:z + 3])\
30                      map (from: s.w, s.w[z:4], s.x, s.x[1:3], err) private (i)
31   {
32     err = 0;
33     for (i = 0; i < 7; i++)
34       if (s.v.b[i] != 16 + i)
35         err = 1;
36     for (i = 1; i < 5; i++)
37       if (s.u[i] != 34 + i)
38         err = 1;
39     for (i = 3; i < 6; i++)
40       if (s.s[i] != i)
41         err = 1;
42       else
43         s.s[i] = 128 + i;
44     for (i = 1; i < 4; i++)
45       if (s.v.d[i] != 17 + i)
46         err = 1;
47       else
48         s.v.d[i] = 23 + i;
49     for (i = 0; i < 4; i++)
50       s.w[i] = 96 + i;
51     for (i = 1; i < 4; i++)
52       s.x[i] = 173 + i;
53   }
54   if (err)
55     abort ();
56   for (i = 0; i < 32; i++)
57     if (a[i] != ((i >= 3 && i < 6) ? 128 + i : i)
58         || b[i] != 32 + i
59         || c[i] != ((i >= 3 && i < 7) ? 93 + i : ((i >= 19 && i < 22) ? 155 + i : 64 + i)))
60       abort ();
61   for (i = 0; i < 10; i++)
62     if (d[i] != ((i >= 1 && i < 4) ? 23 + i : 17 + i))
63       abort ();
66 int
67 main ()
69   char d[10];
70   short *e;
71   int a[32], i;
72   char b[32];
73   short c[32];
74   for (i = 0; i < 32; i++)
75     {
76       a[i] = i;
77       b[i] = 32 + i;
78       c[i] = 64 + i;
79     }
80   for (i = 0; i < 10; i++)
81     d[i] = 17 + i;
82   e = c + 18;
83   S s = { a, b + 2, { 0, a + 16, 0, d }, c + 3, e };
84   int err = 0;
85   #pragma omp target map (to: s.v.b, s.v.b[0:z + 7], s.u, s.u[z + 1:z + 4]) \
86                      map (tofrom: s.s, s.s[3:3], s.v.d[z + 1:z + 3])            \
87                      map (from: s.w, s.w[z:4], s.x, s.x[1:3], err) private (i)
88   {
89     err = 0;
90     for (i = 0; i < 7; i++)
91       if (s.v.b[i] != 16 + i)
92         err = 1;
93     for (i = 1; i < 5; i++)
94       if (s.u[i] != 34 + i)
95         err = 1;
96     for (i = 3; i < 6; i++)
97       if (s.s[i] != i)
98         err = 1;
99       else
100         s.s[i] = 128 + i;
101     for (i = 1; i < 4; i++)
102       if (s.v.d[i] != 17 + i)
103         err = 1;
104       else
105         s.v.d[i] = 23 + i;
106     for (i = 0; i < 4; i++)
107       s.w[i] = 96 + i;
108     for (i = 1; i < 4; i++)
109       s.x[i] = 173 + i;
110   }
111   if (err)
112     abort ();
113   for (i = 0; i < 32; i++)
114     if (a[i] != ((i >= 3 && i < 6) ? 128 + i : i)
115         || b[i] != 32 + i
116         || c[i] != ((i >= 3 && i < 7) ? 93 + i : ((i >= 19 && i < 22) ? 155 + i : 64 + i)))
117       abort ();
118   for (i = 0; i < 10; i++)
119     if (d[i] != ((i >= 1 && i < 4) ? 23 + i : 17 + i))
120       abort ();
121   foo <char, short, int, S> ();
122   return 0;