|  | ! { dg-do run } | 
|  | ! { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O2" } } | 
|  | ! { dg-set-target-env-var OMP_PROC_BIND "spread,close" } | 
|  | ! { dg-set-target-env-var OMP_PLACES "{6,7}:4:-2,!{2,3}" } | 
|  | ! { dg-set-target-env-var OMP_NUM_THREADS "2" } | 
|  |  | 
|  | use omp_lib | 
|  | integer :: num, i, nump | 
|  | num = omp_get_num_places () | 
|  | print *, 'omp_get_num_places () == ', num | 
|  | do i = 0, num - 1 | 
|  | nump = omp_get_place_num_procs (place_num = i) | 
|  | if (nump .eq. 0) then | 
|  | print *, 'place ', i, ' {}' | 
|  | else | 
|  | call print_place (i, nump) | 
|  | end if | 
|  | end do | 
|  | call print_place_var | 
|  | call omp_set_nested (nested = .true.) | 
|  | !$omp parallel | 
|  | if (omp_get_thread_num () == omp_get_num_threads () - 1) then | 
|  | !$omp parallel | 
|  | if (omp_get_thread_num () == omp_get_num_threads () - 1) & | 
|  | call print_place_var | 
|  | !$omp end parallel | 
|  | end if | 
|  | !$omp end parallel | 
|  | contains | 
|  | subroutine print_place (i, nump) | 
|  | integer, intent (in) :: i, nump | 
|  | integer :: ids(nump) | 
|  | call omp_get_place_proc_ids (place_num = i, ids = ids) | 
|  | print *, 'place ', i, ' {', ids, '}' | 
|  | end subroutine | 
|  | subroutine print_place_var | 
|  | integer :: place, num_places | 
|  | place = omp_get_place_num () | 
|  | num_places = omp_get_partition_num_places () | 
|  | print *, 'place ', place | 
|  | if (num_places .gt. 0) call print_partition (num_places) | 
|  | end subroutine | 
|  | subroutine print_partition (num_places) | 
|  | integer, intent (in) :: num_places | 
|  | integer :: place_nums(num_places) | 
|  | call omp_get_partition_place_nums (place_nums = place_nums) | 
|  | print *, 'partition ', place_nums(1), '-', place_nums(num_places) | 
|  | end subroutine | 
|  | end |