1 // RUN: %libomp-compile-and-run
2 #include <stdio.h>
3 #include "omp_testsuite.h"
4 #include "omp_my_sleep.h"
5 
test_omp_flush()6 int test_omp_flush()
7 {
8   int result1;
9   int result2;
10   int dummy;
11 
12   result1 = 0;
13   result2 = 0;
14 
15   #pragma omp parallel
16   {
17     int rank;
18     rank = omp_get_thread_num ();
19     #pragma omp barrier
20     if (rank == 1) {
21       result2 = 3;
22       #pragma omp flush (result2)
23       dummy = result2;
24     }
25     if (rank == 0) {
26       my_sleep(SLEEPTIME);
27       #pragma omp flush (result2)
28       result1 = result2;
29     }
30   }  /* end of parallel */
31   return ((result1 == result2) && (result2 == dummy) && (result2 == 3));
32 }
33 
main()34 int main()
35 {
36   int i;
37   int num_failed=0;
38 
39   // the test requires more than 1 thread to pass
40   omp_set_dynamic(0); // disable dynamic adjustment of threads
41   if (omp_get_max_threads() == 1)
42     omp_set_num_threads(2); // set 2 threads if no HW resources available
43 
44   for (i = 0; i < REPETITIONS; i++) {
45     if(!test_omp_flush()) {
46       num_failed++;
47     }
48   }
49   return num_failed;
50 }
51