1*5e111c5dSAndreyChurbanov // RUN: %libomp-compile-and-run 2*5e111c5dSAndreyChurbanov #include <stdio.h> 3*5e111c5dSAndreyChurbanov #include <omp.h> main()4*5e111c5dSAndreyChurbanovint main() 5*5e111c5dSAndreyChurbanov { 6*5e111c5dSAndreyChurbanov enum {ITERS = 500}; 7*5e111c5dSAndreyChurbanov enum {SIZE = 5}; 8*5e111c5dSAndreyChurbanov int err = 0; 9*5e111c5dSAndreyChurbanov #pragma omp parallel num_threads(2) reduction(+:err) 10*5e111c5dSAndreyChurbanov { 11*5e111c5dSAndreyChurbanov int r = 0; 12*5e111c5dSAndreyChurbanov int i; 13*5e111c5dSAndreyChurbanov #pragma omp taskloop grainsize(SIZE) shared(r) nogroup 14*5e111c5dSAndreyChurbanov for(i=0; i<ITERS; i++) { 15*5e111c5dSAndreyChurbanov #pragma omp atomic 16*5e111c5dSAndreyChurbanov ++r; 17*5e111c5dSAndreyChurbanov } 18*5e111c5dSAndreyChurbanov #pragma omp taskwait 19*5e111c5dSAndreyChurbanov printf("%d\n", r); 20*5e111c5dSAndreyChurbanov if (r != ITERS) 21*5e111c5dSAndreyChurbanov err++; 22*5e111c5dSAndreyChurbanov } // end of parallel 23*5e111c5dSAndreyChurbanov if (err != 0) { 24*5e111c5dSAndreyChurbanov printf("failed, err = %d\n", err); 25*5e111c5dSAndreyChurbanov return 1; 26*5e111c5dSAndreyChurbanov } else { 27*5e111c5dSAndreyChurbanov printf("passed\n"); 28*5e111c5dSAndreyChurbanov return 0; 29*5e111c5dSAndreyChurbanov } 30*5e111c5dSAndreyChurbanov } 31