1 // RUN: %libomp-compile-and-run 2 #include <stdio.h> 3 #include "omp_testsuite.h" 4 5 int myit = 0; 6 #pragma omp threadprivate(myit) 7 int myresult = 0; 8 #pragma omp threadprivate(myresult) 9 test_omp_single_private()10int test_omp_single_private() 11 { 12 int nr_threads_in_single; 13 int result; 14 int nr_iterations; 15 int i; 16 17 myit = 0; 18 nr_threads_in_single = 0; 19 nr_iterations = 0; 20 result = 0; 21 22 #pragma omp parallel private(i) 23 { 24 myresult = 0; 25 myit = 0; 26 for (i = 0; i < LOOPCOUNT; i++) { 27 #pragma omp single private(nr_threads_in_single) nowait 28 { 29 nr_threads_in_single = 0; 30 #pragma omp flush 31 nr_threads_in_single++; 32 #pragma omp flush 33 myit++; 34 myresult = myresult + nr_threads_in_single; 35 } 36 } 37 #pragma omp critical 38 { 39 result += nr_threads_in_single; 40 nr_iterations += myit; 41 } 42 } 43 return ((result == 0) && (nr_iterations == LOOPCOUNT)); 44 } /* end of check_single private */ 45 main()46int main() 47 { 48 int i; 49 int num_failed=0; 50 51 for(i = 0; i < REPETITIONS; i++) { 52 if(!test_omp_single_private()) { 53 num_failed++; 54 } 55 } 56 return num_failed; 57 } 58