1  #include <omp.h>
       2  #include <stdlib.h>
       3  
       4  int
       5  main (void)
       6  {
       7    int l = 0;
       8    omp_nest_lock_t lock;
       9    omp_init_nest_lock (&lock);
      10    if (omp_test_nest_lock (&lock) != 1)
      11      abort ();
      12    if (omp_test_nest_lock (&lock) != 2)
      13      abort ();
      14  #pragma omp parallel if (0) reduction (+:l)
      15    {
      16      /* In OpenMP 2.5 this was supposed to return 3,
      17         but in OpenMP 3.0 the parallel region has a different
      18         task and omp_*_lock_t are owned by tasks, not by threads.  */
      19      if (omp_test_nest_lock (&lock) != 0)
      20        l++;
      21    }
      22    if (l)
      23      abort ();
      24    if (omp_test_nest_lock (&lock) != 3)
      25      abort ();
      26    omp_unset_nest_lock (&lock);
      27    omp_unset_nest_lock (&lock);
      28    omp_unset_nest_lock (&lock);
      29    omp_destroy_nest_lock (&lock);
      30    return 0;
      31  }