blob: b5a3fbd6fa8015d523534a5e65e9461a389aa048 [file] [log] [blame]
Jonathan Peyton614c7ef2015-09-21 20:41:31 +00001// RUN: %libomp-compile-and-run
2#include <stdio.h>
3#include "omp_testsuite.h"
4
5/*
6 * Test if the compiler supports nested parallelism
7 * By Chunhua Liao, University of Houston
8 * Oct. 2005
9 */
10int test_omp_nested()
11{
Hal Finkel2bc34492017-06-27 03:04:25 +000012#ifdef _OPENMP
13 if (omp_get_max_threads() > 4)
14 omp_set_num_threads(4);
Andrey Churbanov74f98552018-12-13 10:04:10 +000015 if (omp_get_max_threads() < 2)
16 omp_set_num_threads(2);
Hal Finkel2bc34492017-06-27 03:04:25 +000017#endif
18
Jonathan Peyton614c7ef2015-09-21 20:41:31 +000019 int counter = 0;
20#ifdef _OPENMP
21 omp_set_nested(1);
Jonathan Peyton154ac072019-02-19 18:51:11 +000022 omp_set_max_active_levels(omp_get_supported_active_levels());
Jonathan Peyton614c7ef2015-09-21 20:41:31 +000023#endif
24
25 #pragma omp parallel shared(counter)
26 {
27 #pragma omp critical
28 counter++;
29 #pragma omp parallel
30 {
31 #pragma omp critical
32 counter--;
33 }
34 }
35 return (counter != 0);
36}
37
38int main()
39{
40 int i;
41 int num_failed=0;
42
43 for(i = 0; i < REPETITIONS; i++) {
44 if(!test_omp_nested()) {
45 num_failed++;
46 }
47 }
48 return num_failed;
49}