| ! PR middle-end/102972 |
| |
| module m |
| implicit none (type, external) |
| interface |
| subroutine omp_set_num_teams (num_teams); integer :: num_teams; end |
| subroutine omp_set_teams_thread_limit (thread_limit); integer :: thread_limit; end |
| subroutine omp_set_num_teams_8 (num_teams); integer(8) :: num_teams; end |
| subroutine omp_set_num_teams_9 (num_teams); integer :: num_teams; end |
| subroutine omp_set_teams_thread_limit_8 (thread_limit); integer(8) :: thread_limit; end |
| integer function omp_get_num_teams (); end |
| integer function omp_get_team_size (level); integer :: level; end |
| integer function omp_get_team_num (); end |
| integer function omp_get_max_teams (); end |
| integer function omp_get_teams_thread_limit (); end |
| logical function omp_is_initial_device (); end |
| integer function omp_get_num_threads (); end |
| end interface |
| |
| contains |
| |
| subroutine valid () |
| integer :: i, n |
| !$omp teams |
| !$omp distribute |
| do i = 1, 64 |
| end do |
| |
| n = omp_get_num_teams () |
| if (n >= omp_get_team_num ()) & |
| error stop |
| |
| !$omp parallel do |
| do i = 1, 64 |
| if (.not.omp_is_initial_device () .or. omp_get_num_threads () < 0) & |
| error stop |
| end do |
| |
| !$omp loop |
| do i = 1, 64 |
| end do |
| !$omp end teams |
| end |
| |
| subroutine invalid_nest () |
| integer :: i, n |
| !$omp teams |
| !$omp distribute parallel do simd |
| do i = 1, 64 |
| end do |
| |
| n = 0 |
| n = n + omp_get_team_size (0) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_team_size\[^\n\r]*' strictly nested in a 'teams' region" } |
| n = n + omp_get_num_teams () |
| n = n + omp_get_team_num () |
| call omp_set_num_teams (n) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_set_num_teams\[^\n\r]*' strictly nested in a 'teams' region" } |
| call omp_set_num_teams_8 (4_8) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_set_num_teams_8\[^\n\r]*' strictly nested in a 'teams' region" } |
| call omp_set_num_teams_9 (4) ! OK - but misnamed user function |
| n = n + omp_get_max_teams () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_max_teams\[^\n\r]*' strictly nested in a 'teams' region" } |
| n = n + omp_get_teams_thread_limit () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_teams_thread_limit\[^\n\r]*' strictly nested in a 'teams' region" } |
| call omp_set_teams_thread_limit (n) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_set_teams_thread_limit'\[^\n\r]* strictly nested in a 'teams' region" } |
| call omp_set_teams_thread_limit_8 (3_8) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_set_teams_thread_limit_8'\[^\n\r]* strictly nested in a 'teams' region" } |
| !$omp end teams |
| end |
| end module |