1// RUN: %libomp-compile-and-run
2#include <stdio.h>
3#include "omp_testsuite.h"
4
5/*
6 * Checks that false is returned when called from serial region
7 * and true is returned when called within parallel region.
8 */
9int test_omp_in_parallel()
10{
11 int serial;
12 int isparallel;
13
14 serial = 1;
15 isparallel = 0;
16 serial = omp_in_parallel();
17
18 #pragma omp parallel
19 {
20 #pragma omp single
21 {
22 isparallel = omp_in_parallel();
23 }
24 }
25 return (!(serial) && isparallel);
26}
27
28int main()
29{
30 int i;
31 int num_failed=0;
32
33 // the test requires more than 1 thread to pass
34 omp_set_dynamic(0); // disable dynamic adjustment of threads
35 if (omp_get_max_threads() == 1)
36 omp_set_num_threads(2); // set 2 threads if no HW resources available
37
38 for(i = 0; i < REPETITIONS; i++) {
39 if(!test_omp_in_parallel()) {
40 num_failed++;
41 }
42 }
43 return num_failed;
44}
45

source code of openmp/runtime/test/api/omp_in_parallel.c