2018-01-22 Sebastian Perta <sebastian.perta@renesas.com>
[official-gcc.git] / libgomp / testsuite / libgomp.c++ / target-11.C
blobfe99603351da5464cd8dbf0812cddc11dca9874f
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[0:z + 7], s.template u[z + 1:z + 4]) \
27                      map (tofrom:s.s[3:3], s. template v. template d[z + 1:z + 3]) \
28                      map (from: s.w[z:4], s.x[1:3], err) private (i)
29   {
30     err = 0;
31     for (i = 0; i < 7; i++)
32       if (s.v.b[i] != 16 + i)
33         err = 1;
34     for (i = 1; i < 5; i++)
35       if (s.u[i] != 34 + i)
36         err = 1;
37     for (i = 3; i < 6; i++)
38       if (s.s[i] != i)
39         err = 1;
40       else
41         s.s[i] = 128 + i;
42     for (i = 1; i < 4; i++)
43       if (s.v.d[i] != 17 + i)
44         err = 1;
45       else
46         s.v.d[i] = 23 + i;
47     for (i = 0; i < 4; i++)
48       s.w[i] = 96 + i;
49     for (i = 1; i < 4; i++)
50       s.x[i] = 173 + i;
51   }
52   if (err)
53     abort ();
54   for (i = 0; i < 32; i++)
55     if (a[i] != ((i >= 3 && i < 6) ? 128 + i : i)
56         || b[i] != 32 + i
57         || c[i] != ((i >= 3 && i < 7) ? 93 + i : ((i >= 19 && i < 22) ? 155 + i : 64 + i)))
58       abort ();
59   for (i = 0; i < 10; i++)
60     if (d[i] != ((i >= 1 && i < 4) ? 23 + i : 17 + i))
61       abort ();
64 int
65 main ()
67   char d[10];
68   short *e;
69   int a[32], i;
70   char b[32];
71   short c[32];
72   for (i = 0; i < 32; i++)
73     {
74       a[i] = i;
75       b[i] = 32 + i;
76       c[i] = 64 + i;
77     }
78   for (i = 0; i < 10; i++)
79     d[i] = 17 + i;
80   e = c + 18;
81   S s = { a, b + 2, { 0, a + 16, 0, d }, c + 3, e };
82   int err = 0;
83   #pragma omp target map (to:s.v.b[0:z + 7], s.u[z + 1:z + 4]) \
84                      map (tofrom:s.s[3:3], s.v.d[z + 1:z + 3]) \
85                      map (from: s.w[z:4], s.x[1:3], err) private (i)
86   {
87     err = 0;
88     for (i = 0; i < 7; i++)
89       if (s.v.b[i] != 16 + i)
90         err = 1;
91     for (i = 1; i < 5; i++)
92       if (s.u[i] != 34 + i)
93         err = 1;
94     for (i = 3; i < 6; i++)
95       if (s.s[i] != i)
96         err = 1;
97       else
98         s.s[i] = 128 + i;
99     for (i = 1; i < 4; i++)
100       if (s.v.d[i] != 17 + i)
101         err = 1;
102       else
103         s.v.d[i] = 23 + i;
104     for (i = 0; i < 4; i++)
105       s.w[i] = 96 + i;
106     for (i = 1; i < 4; i++)
107       s.x[i] = 173 + i;
108   }
109   if (err)
110     abort ();
111   for (i = 0; i < 32; i++)
112     if (a[i] != ((i >= 3 && i < 6) ? 128 + i : i)
113         || b[i] != 32 + i
114         || c[i] != ((i >= 3 && i < 7) ? 93 + i : ((i >= 19 && i < 22) ? 155 + i : 64 + i)))
115       abort ();
116   for (i = 0; i < 10; i++)
117     if (d[i] != ((i >= 1 && i < 4) ? 23 + i : 17 + i))
118       abort ();
119   foo <char, short, int, S> ();
120   return 0;