12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /* { dg-do run } */
- #include <omp.h>
- extern void abort ();
- int l = 5;
- int
- foo (int i)
- {
- int j = 7;
- const int k = 8;
- #pragma omp task firstprivate (i) shared (j, l)
- {
- #pragma omp critical
- {
- j += i;
- l += k;
- }
- }
- i++;
- #pragma omp task firstprivate (i) shared (j, l)
- {
- #pragma omp critical
- {
- j += i;
- l += k;
- }
- }
- i++;
- #pragma omp task firstprivate (i) shared (j, l)
- {
- #pragma omp critical
- {
- j += i;
- l += k;
- }
- }
- i++;
- #pragma omp task firstprivate (i) shared (j, l)
- {
- #pragma omp critical
- {
- j += i;
- l += k;
- }
- }
- i++;
- #pragma omp taskwait
- return (i != 8 * omp_get_thread_num () + 4
- || j != 4 * i - 3
- || k != 8);
- }
- int
- main (void)
- {
- int r = 0;
- #pragma omp parallel num_threads (4) reduction(+:r)
- if (omp_get_num_threads () != 4)
- {
- #pragma omp master
- l = 133;
- }
- else if (foo (8 * omp_get_thread_num ()))
- r++;
- if (r || l != 133)
- abort ();
- return 0;
- }
|