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

source code of openmp/runtime/test/worksharing/single/omp_single.c