| // RUN: %libomp-compile-and-run | |
| #include <stdio.h> | |
| #include <omp.h> | |
| int main() | |
| { | |
| enum {ITERS = 500}; | |
| enum {SIZE = 5}; | |
| int err = 0; | |
| #pragma omp parallel num_threads(2) reduction(+:err) | |
| { | |
| int r = 0; | |
| int i; | |
| #pragma omp taskloop grainsize(SIZE) shared(r) nogroup | |
| for(i=0; i<ITERS; i++) { | |
| #pragma omp atomic | |
| ++r; | |
| } | |
| #pragma omp taskwait | |
| printf("%d\n", r); | |
| if (r != ITERS) | |
| err++; | |
| } // end of parallel | |
| if (err != 0) { | |
| printf("failed, err = %d\n", err); | |
| return 1; | |
| } else { | |
| printf("passed\n"); | |
| return 0; | |
| } | |
| } |