(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c/
thread-limit-4.c
       1  /* { dg-do run } */
       2  /* { dg-set-target-env-var OMP_THREAD_LIMIT "9" } */
       3  /* { dg-additional-options "-Wno-deprecated-declarations" } */
       4  
       5  #include <stdlib.h>
       6  #include <unistd.h>
       7  #include <omp.h>
       8  
       9  int
      10  main ()
      11  {
      12    if (omp_get_thread_limit () != 9)
      13      return 0;
      14    omp_set_dynamic (0);
      15    #pragma omp parallel num_threads (8)
      16    if (omp_get_num_threads () != 8)
      17      abort ();
      18    #pragma omp parallel num_threads (16)
      19    if (omp_get_num_threads () > 9)
      20      abort ();
      21    omp_set_dynamic (0);
      22    omp_set_nested (1);
      23    #pragma omp teams thread_limit (6)
      24      {
      25  	#pragma omp parallel num_threads (3)
      26  	if (omp_get_thread_limit () > 6
      27  	    || (omp_get_thread_limit () == 6 && omp_get_num_threads () != 3))
      28  	  abort ();
      29  	#pragma omp parallel num_threads (3)
      30  	if (omp_get_thread_limit () > 6
      31  	    || (omp_get_thread_limit () == 6 && omp_get_num_threads () != 3))
      32  	  abort ();
      33  	#pragma omp parallel num_threads (8)
      34  	if (omp_get_thread_limit () > 6
      35  	    || (omp_get_thread_limit () == 6 && omp_get_num_threads () > 6))
      36  	  abort ();
      37  	#pragma omp parallel num_threads (6)
      38  	if (omp_get_thread_limit () > 6
      39  	    || (omp_get_thread_limit () == 6 && omp_get_num_threads () != 6))
      40  	  abort ();
      41  	int cnt = 0;
      42  	#pragma omp parallel num_threads (5)
      43  	#pragma omp parallel num_threads (5)
      44  	#pragma omp parallel num_threads (2)
      45  	{
      46  	  int v;
      47  	  #pragma omp atomic capture
      48  	  v = ++cnt;
      49  	  if (v > 6)
      50  	    abort ();
      51  	  usleep (10000);
      52  	  #pragma omp atomic
      53  	  --cnt;
      54  	}
      55      }
      56    return 0;
      57  }