OSDN Git Service

* c-cppbuiltin.c (c_cpp_builtins): Change _OPENMP value to
[pf3gnuchains/gcc-fork.git] / libgomp / testsuite / libgomp.c / task-3.c
1 /* { dg-do run } */
2
3 #include <omp.h>
4 extern void abort ();
5
6 int l = 5;
7
8 int
9 foo (int i)
10 {
11   int j = 7;
12   const int k = 8;
13   #pragma omp task firstprivate (i) shared (j, l)
14   {
15     #pragma omp critical
16       {
17         j += i;
18         l += k;
19       }
20   }
21   i++;
22   #pragma omp task firstprivate (i) shared (j, l)
23   {
24     #pragma omp critical
25       {
26         j += i;
27         l += k;
28       }
29   }
30   i++;
31   #pragma omp task firstprivate (i) shared (j, l)
32   {
33     #pragma omp critical
34       {
35         j += i;
36         l += k;
37       }
38   }
39   i++;
40   #pragma omp task firstprivate (i) shared (j, l)
41   {
42     #pragma omp critical
43       {
44         j += i;
45         l += k;
46       }
47   }
48   i++;
49   #pragma omp taskwait
50   return (i != 8 * omp_get_thread_num () + 4
51           || j != 4 * i - 3
52           || k != 8);
53 }
54
55 int
56 main (void)
57 {
58   int r = 0;
59   #pragma omp parallel num_threads (4) reduction(+:r)
60     if (omp_get_num_threads () != 4)
61       {
62         #pragma omp master
63           l = 133;
64       }
65     else if (foo (8 * omp_get_thread_num ()))
66       r++;
67   if (r || l != 133)
68     abort ();
69   return 0;
70 }