1/* { dg-do run } */
2
3volatile int ji = 100, ki = 2;
4volatile unsigned int ju = 100, ku = 2;
5volatile long long int jll = 100, kll = 2;
6volatile unsigned long long int jull = 100, kull = 2;
7unsigned long long l;
8
9void
10f0 (void)
11{
12  int i, j, k;
13  unsigned int j2, k2;
14  #pragma omp for reduction(+: l)
15  for (i = ji; i < ki; i++)
16    l++;
17  if (l != 0)
18    __builtin_abort ();
19  #pragma omp parallel for reduction(+: l)
20  for (i = ji; i < ki; i++)
21    l++;
22  if (l != 0)
23    __builtin_abort ();
24  #pragma omp for reduction(+: l) collapse(3)
25  for (j = 0; j < 4; j++)
26    for (i = ji; i < ki; i++)
27      for (k = 0; k < 5; k += 2)
28	l++;
29  if (l != 0)
30    __builtin_abort ();
31  #pragma omp parallel for reduction(+: l) collapse(3)
32  for (j = 0; j < 4; j++)
33    for (i = ji; i < ki; i++)
34      for (k = 0; k < 5; k += 2)
35	l++;
36  if (l != 0)
37    __builtin_abort ();
38  #pragma omp for reduction(+: l) collapse(3)
39  for (j2 = 0; j2 < 4; j2++)
40    for (i = ji; i < ki; i++)
41      for (k2 = 0; k2 < 5; k2 += 2)
42	l++;
43  if (l != 0)
44    __builtin_abort ();
45  #pragma omp parallel for reduction(+: l) collapse(3)
46  for (j2 = 0; j2 < 4; j2++)
47    for (i = ji; i < ki; i++)
48      for (k2 = 0; k2 < 5; k2 += 2)
49	l++;
50  if (l != 0)
51    __builtin_abort ();
52  #pragma omp parallel for reduction(+: l) collapse(3)
53  for (j = 0; j < 4; j++)
54    for (i = ji; i < ki; i++)
55      for (k = ki + 10; k < ji - 10; k += 2)
56	l++;
57  if (l != 0)
58    __builtin_abort ();
59  #pragma omp parallel for reduction(+: l) collapse(3)
60  for (j = ki + 10; j < ji - 10; j++)
61    for (i = ji; i < ki; i++)
62      for (k = 0; k < 5; k += 2)
63	l++;
64  if (l != 0)
65    __builtin_abort ();
66}
67
68void
69f1 (void)
70{
71  unsigned int i, j, k;
72  int j2, k2;
73  #pragma omp for reduction(+: l)
74  for (i = ju; i < ku; i++)
75    l++;
76  if (l != 0)
77    __builtin_abort ();
78  #pragma omp parallel for reduction(+: l)
79  for (i = ju; i < ku; i++)
80    l++;
81  if (l != 0)
82    __builtin_abort ();
83  #pragma omp for reduction(+: l) collapse(3)
84  for (j = 0; j < 4; j++)
85    for (i = ju; i < ku; i++)
86      for (k = 0; k < 5; k += 2)
87	l++;
88  if (l != 0)
89    __builtin_abort ();
90  #pragma omp parallel for reduction(+: l) collapse(3)
91  for (j = 0; j < 4; j++)
92    for (i = ju; i < ku; i++)
93      for (k = 0; k < 5; k += 2)
94	l++;
95  if (l != 0)
96    __builtin_abort ();
97  #pragma omp for reduction(+: l) collapse(3)
98  for (j2 = 0; j2 < 4; j2++)
99    for (i = ju; i < ku; i++)
100      for (k2 = 0; k2 < 5; k2 += 2)
101	l++;
102  if (l != 0)
103    __builtin_abort ();
104  #pragma omp parallel for reduction(+: l) collapse(3)
105  for (j2 = 0; j2 < 4; j2++)
106    for (i = ju; i < ku; i++)
107      for (k2 = 0; k2 < 5; k2 += 2)
108	l++;
109  if (l != 0)
110    __builtin_abort ();
111  #pragma omp parallel for reduction(+: l) collapse(3)
112  for (j = 0; j < 4; j++)
113    for (i = ju; i < ku; i++)
114      for (k = ku; k < ju; k += 2)
115	l++;
116  if (l != 0)
117    __builtin_abort ();
118  #pragma omp parallel for reduction(+: l) collapse(3)
119  for (j = ku; j < ju; j++)
120    for (i = ju; i < ku; i++)
121      for (k = 0; k < 5; k += 2)
122	l++;
123  if (l != 0)
124    __builtin_abort ();
125}
126
127void
128f2 (void)
129{
130  long long int i, j, k;
131  unsigned long long int j2, k2;
132  #pragma omp for reduction(+: l)
133  for (i = jll; i < kll; i++)
134    l++;
135  if (l != 0)
136    __builtin_abort ();
137  #pragma omp parallel for reduction(+: l)
138  for (i = jll; i < kll; i++)
139    l++;
140  if (l != 0)
141    __builtin_abort ();
142  #pragma omp for reduction(+: l) collapse(3)
143  for (j = 0; j < 4; j++)
144    for (i = jll; i < kll; i++)
145      for (k = 0; k < 5; k += 2)
146	l++;
147  if (l != 0)
148    __builtin_abort ();
149  #pragma omp parallel for reduction(+: l) collapse(3)
150  for (j = 0; j < 4; j++)
151    for (i = jll; i < kll; i++)
152      for (k = 0; k < 5; k += 2)
153	l++;
154  if (l != 0)
155    __builtin_abort ();
156  #pragma omp for reduction(+: l) collapse(3)
157  for (j2 = 0; j2 < 4; j2++)
158    for (i = jll; i < kll; i++)
159      for (k2 = 0; k2 < 5; k2 += 2)
160	l++;
161  if (l != 0)
162    __builtin_abort ();
163  #pragma omp parallel for reduction(+: l) collapse(3)
164  for (j2 = 0; j2 < 4; j2++)
165    for (i = jll; i < kll; i++)
166      for (k2 = 0; k2 < 5; k2 += 2)
167	l++;
168  if (l != 0)
169    __builtin_abort ();
170  #pragma omp parallel for reduction(+: l) collapse(3)
171  for (j = 0; j < 4; j++)
172    for (i = jll; i < kll; i++)
173      for (k = kll; k < jll; k += 2)
174	l++;
175  if (l != 0)
176    __builtin_abort ();
177  #pragma omp parallel for reduction(+: l) collapse(3)
178  for (j = kll; j < jll; j++)
179    for (i = jll; i < kll; i++)
180      for (k = 0; k < 5; k += 2)
181	l++;
182  if (l != 0)
183    __builtin_abort ();
184}
185
186void
187f3 (void)
188{
189  unsigned long long int i, j, k;
190  long long int j2, k2;
191  #pragma omp for reduction(+: l)
192  for (i = jull; i < kull; i++)
193    l++;
194  if (l != 0)
195    __builtin_abort ();
196  #pragma omp parallel for reduction(+: l)
197  for (i = jull; i < kull; i++)
198    l++;
199  if (l != 0)
200    __builtin_abort ();
201  #pragma omp for reduction(+: l) collapse(3)
202  for (j = 0; j < 4; j++)
203    for (i = jull; i < kull; i++)
204      for (k = 0; k < 5; k += 2)
205	l++;
206  if (l != 0)
207    __builtin_abort ();
208  #pragma omp parallel for reduction(+: l) collapse(3)
209  for (j = 0; j < 4; j++)
210    for (i = jull; i < kull; i++)
211      for (k = 0; k < 5; k += 2)
212	l++;
213  if (l != 0)
214    __builtin_abort ();
215  #pragma omp for reduction(+: l) collapse(3)
216  for (j2 = 0; j2 < 4; j2++)
217    for (i = jull; i < kull; i++)
218      for (k2 = 0; k2 < 5; k2 += 2)
219	l++;
220  if (l != 0)
221    __builtin_abort ();
222  #pragma omp parallel for reduction(+: l) collapse(3)
223  for (j2 = 0; j2 < 4; j2++)
224    for (i = jull; i < kull; i++)
225      for (k2 = 0; k2 < 5; k2 += 2)
226	l++;
227  if (l != 0)
228    __builtin_abort ();
229  #pragma omp parallel for reduction(+: l) collapse(3)
230  for (j = 0; j < 4; j++)
231    for (i = jull; i < kull; i++)
232      for (k = kull; k < jull; k += 2)
233	l++;
234  if (l != 0)
235    __builtin_abort ();
236  #pragma omp parallel for reduction(+: l) collapse(3)
237  for (j = kull; j < jull; j++)
238    for (i = jull; i < kull; i++)
239      for (k = 0; k < 5; k += 2)
240	l++;
241  if (l != 0)
242    __builtin_abort ();
243}
244
245int
246main ()
247{
248  f0 ();
249  f1 ();
250  f2 ();
251  f3 ();
252  return 0;
253}
254