C99 testsuite readiness: Compile more tests with -std=gnu89
[official-gcc.git] / gcc / testsuite / g++.dg / gomp / allocate-3.C
blobe778314f07e750d9b28bd34a65662e83e7a64afc
1 template <typename T>
2 void
3 foo (T &x, T (&y)[4], T *&z, int &u, int (&v)[4], int *&w)
5   T s[4] = { 0, 0, 0, 0 };
6   T *p = s;
7 #pragma omp parallel reduction (+: s) allocate(s)
8   s[0]++;
9 #pragma omp parallel reduction (+: s[0:3]) allocate(s)
10   s[0]++;
11 #pragma omp parallel reduction (+: s[2:2]) allocate(s)
12   s[2]++;
13 #pragma omp parallel reduction (+: p[:2]) allocate(p)
14   p[0]++;
15 #pragma omp parallel reduction (+: p[2:2]) allocate(p)
16   p[2]++;
17   int s2[4] = { 0, 0, 0, 0 };
18   int *p2 = s2;
19 #pragma omp parallel reduction (+: s2) allocate(s2)
20   s2[0]++;
21 #pragma omp parallel reduction (+: s2[0:3]) allocate(s2)
22   s2[0]++;
23 #pragma omp parallel reduction (+: s2[2:2]) allocate(s2)
24   s2[2]++;
25 #pragma omp parallel reduction (+: p2[:2]) allocate(p2)
26   p2[0]++;
27 #pragma omp parallel reduction (+: p2[2:2]) allocate(p2)
28   p2[2]++;
29 #pragma omp parallel reduction (+: x) allocate(x)
30   x++;
31 #pragma omp parallel reduction (+: y) allocate(y)
32   y[0]++;
33 #pragma omp parallel reduction (+: y[0:3]) allocate(y)
34   y[0]++;
35 #pragma omp parallel reduction (+: y[2:2]) allocate(y)
36   y[2]++;
37 #pragma omp parallel reduction (+: z[:2]) allocate(z)
38   z[0]++;
39 #pragma omp parallel reduction (+: z[2:2]) allocate(z)
40   z[2]++;
41 #pragma omp parallel reduction (+: u) allocate(u)
42   u++;
43 #pragma omp parallel reduction (+: v) allocate(v)
44   v[0]++;
45 #pragma omp parallel reduction (+: v[0:3]) allocate(v)
46   v[0]++;
47 #pragma omp parallel reduction (+: v[2:2]) allocate(v)
48   v[2]++;
49 #pragma omp parallel reduction (+: w[:2]) allocate(w)
50   w[0]++;
51 #pragma omp parallel reduction (+: w[2:2]) allocate(w)
52   w[2]++;
55 template <typename T>
56 void
57 bar (T &x, T (&y)[4], T *&z, int &u, int (&v)[4], int *&w)
59   T s[4] = { 0, 0, 0, 0 };
60   T *p = s;
61   int i;
62 #pragma omp teams distribute parallel for reduction (+: s) allocate(s)
63   for (i = 0; i < 64; i++)
64     s[0]++;
65 #pragma omp teams distribute parallel for reduction (+: s[0:3]) allocate(s)
66   for (i = 0; i < 64; i++)
67     s[0]++;
68 #pragma omp teams distribute parallel for reduction (+: s[2:2]) allocate(s)
69   for (i = 0; i < 64; i++)
70     s[2]++;
71 #pragma omp teams distribute parallel for reduction (+: p[:2]) allocate(p)
72   for (i = 0; i < 64; i++)
73     p[0]++;
74 #pragma omp teams distribute parallel for reduction (+: p[2:2]) allocate(p)
75   for (i = 0; i < 64; i++)
76     p[2]++;
77   int s2[4] = { 0, 0, 0, 0 };
78   int *p2 = s2;
79 #pragma omp teams distribute parallel for reduction (+: s2) allocate(s2)
80   for (i = 0; i < 64; i++)
81     s2[0]++;
82 #pragma omp teams distribute parallel for reduction (+: s2[0:3]) allocate(s2)
83   for (i = 0; i < 64; i++)
84     s2[0]++;
85 #pragma omp teams distribute parallel for reduction (+: s2[2:2]) allocate(s2)
86   for (i = 0; i < 64; i++)
87     s2[2]++;
88 #pragma omp teams distribute parallel for reduction (+: p2[:2]) allocate(p2)
89   for (i = 0; i < 64; i++)
90     p2[0]++;
91 #pragma omp teams distribute parallel for reduction (+: p2[2:2]) allocate(p2)
92   for (i = 0; i < 64; i++)
93     p2[2]++;
94 #pragma omp teams distribute parallel for reduction (+: x) allocate(x)
95   for (i = 0; i < 64; i++)
96     x++;
97 #pragma omp teams distribute parallel for reduction (+: y) allocate(y)
98   for (i = 0; i < 64; i++)
99     y[0]++;
100 #pragma omp teams distribute parallel for reduction (+: y[0:3]) allocate(y)
101   for (i = 0; i < 64; i++)
102     y[0]++;
103 #pragma omp teams distribute parallel for reduction (+: y[2:2]) allocate(y)
104   for (i = 0; i < 64; i++)
105     y[2]++;
106 #pragma omp teams distribute parallel for reduction (+: z[:2]) allocate(z)
107   for (i = 0; i < 64; i++)
108     z[0]++;
109 #pragma omp teams distribute parallel for reduction (+: z[2:2]) allocate(z)
110   for (i = 0; i < 64; i++)
111     z[2]++;
112 #pragma omp teams distribute parallel for reduction (+: u) allocate(u)
113   for (i = 0; i < 64; i++)
114     u++;
115 #pragma omp teams distribute parallel for reduction (+: v) allocate(v)
116   for (i = 0; i < 64; i++)
117     v[0]++;
118 #pragma omp teams distribute parallel for reduction (+: v[0:3]) allocate(v)
119   for (i = 0; i < 64; i++)
120     v[0]++;
121 #pragma omp teams distribute parallel for reduction (+: v[2:2]) allocate(v)
122   for (i = 0; i < 64; i++)
123     v[2]++;
124 #pragma omp teams distribute parallel for reduction (+: w[:2]) allocate(w)
125   for (i = 0; i < 64; i++)
126     w[0]++;
127 #pragma omp teams distribute parallel for reduction (+: w[2:2]) allocate(w)
128   for (i = 0; i < 64; i++)
129     w[2]++;
132 void
133 baz (long int &x, long int (&y)[4], long int *&z)
135 #pragma omp parallel reduction (+: x) allocate(x)
136   x++;
137 #pragma omp parallel reduction (+: y) allocate(y)
138   y[0]++;
139 #pragma omp parallel reduction (+: y[0:3]) allocate(y)
140   y[0]++;
141 #pragma omp parallel reduction (+: y[2:2]) allocate(y)
142   y[2]++;
143 #pragma omp parallel reduction (+: z[:2]) allocate(z)
144   z[0]++;
145 #pragma omp parallel reduction (+: z[2:2]) allocate(z)
146   z[2]++;
149 void
150 qux (long long int &x, long long int (&y)[4], long long int *&z)
152   int i;
153 #pragma omp teams distribute parallel for reduction (+: x) allocate(x)
154   for (i = 0; i < 64; i++)
155     x++;
156 #pragma omp teams distribute parallel for reduction (+: y) allocate(y)
157   for (i = 0; i < 64; i++)
158     y[0]++;
159 #pragma omp teams distribute parallel for reduction (+: y[0:3]) allocate(y)
160   for (i = 0; i < 64; i++)
161     y[0]++;
162 #pragma omp teams distribute parallel for reduction (+: y[2:2]) allocate(y)
163   for (i = 0; i < 64; i++)
164     y[2]++;
165 #pragma omp teams distribute parallel for reduction (+: z[:2]) allocate(z)
166   for (i = 0; i < 64; i++)
167     z[0]++;
168 #pragma omp teams distribute parallel for reduction (+: z[2:2]) allocate(z)
169   for (i = 0; i < 64; i++)
170     z[2]++;
173 void
174 test ()
176   long int x = 0;
177   long int y[4] = { 0, 0, 0, 0 };
178   long int *z = y;
179   int u = 0;
180   int v[4] = { 0, 0, 0, 0 };
181   int *w = v;
182   long long int x2 = 0;
183   long long int y2[4] = { 0, 0, 0, 0 };
184   long long int *z2 = y2;
185   foo (x, y, z, u, v, w);
186   bar (x2, y2, z2, u, v, w);
189 namespace N
191   int a;
192   void foo ()
193   {
194     int i;
195     #pragma omp parallel firstprivate (N::a) allocate (a)
196     a++;
197     #pragma omp parallel firstprivate (a) allocate (N::a)
198     a++;
199     #pragma omp teams distribute parallel for firstprivate (N::a) allocate (a)
200     for (i = 0; i < 64; i++)
201       a++;
202     #pragma omp teams distribute parallel for firstprivate (a) allocate (N::a)
203     for (i = 0; i < 64; i++)
204       a++;
205   }