Daily bump.
[official-gcc.git] / libgomp / testsuite / libgomp.c / target-critical-1.c
blob84ad55823cb7fdaec10e9985e7a5852398e9c388
1 /* { dg-do run } */
3 #include <omp.h>
4 #include <stdlib.h>
6 #define N 2000
8 #pragma omp declare target
9 int foo ()
11 int A[N];
12 int i, nthreads;
13 int res = 0;
15 #pragma omp parallel shared (A, nthreads)
17 #pragma omp master
18 nthreads = omp_get_num_threads ();
20 #pragma omp for
21 for (i = 0; i < N; i++)
22 A[i] = 0;
24 #pragma omp critical (crit1)
25 for (i = 0; i < N; i++)
26 A[i]++;
29 for (i = 0; i < N; i++)
30 if (A[i] != nthreads)
31 res = 1;
33 return res;
35 #pragma omp end declare target
37 int main ()
39 int res1, res2;
41 #pragma omp target map (from: res1, res2)
43 int B[N];
44 int i, nthreads;
46 res1 = foo ();
48 #pragma omp parallel shared (B, nthreads)
50 #pragma omp master
51 nthreads = omp_get_num_threads ();
53 #pragma omp for
54 for (i = 0; i < N; i++)
55 B[i] = 0;
57 #pragma omp critical (crit2)
58 for (i = 0; i < N; i++)
59 B[i]++;
62 res2 = 0;
63 for (i = 0; i < N; i++)
64 if (B[i] != nthreads)
65 res2 = 1;
68 if (res1 || res2)
69 abort ();
71 return 0;