1// RUN: %libomp-compile
2// RUN: env KMP_HOT_TEAMS_MODE=0 KMP_HOT_TEAMS_MAX_LEVEL=1 %libomp-run
3//
4// Force the defaults of:
5// KMP_HOT_TEAMS_MODE=0 means free extra threads after parallel
6// involving non-hot team
7// KMP_HOT_TEAMS_MAX_LEVEL=1 means only the initial outer team
8// is a hot team.
9
10#include <stdio.h>
11#include <stdlib.h>
12#include <omp.h>
13
14int main() {
15 int a;
16 omp_set_max_active_levels(2);
17// This nested parallel creates extra threads on the thread pool
18#pragma omp parallel num_threads(2)
19 {
20#pragma omp parallel num_threads(2)
21 {
22#pragma omp atomic
23 a++;
24 }
25 }
26
27// Causes assert if hidden helper thread tries to allocate from thread pool
28// instead of creating new OS threads
29#pragma omp parallel num_threads(1)
30 {
31#pragma omp target nowait
32 { a++; }
33 }
34
35 return EXIT_SUCCESS;
36}
37

source code of openmp/runtime/test/tasking/hidden_helper_task/issue-87117.c