blob: 8d7f9c57a98dd78edb1ca6d46b2dcd576a03ea6b [file] [log] [blame]
module m
use iso_c_binding
implicit none (type, external)
interface
subroutine foo()
end subroutine foo
integer function omp_get_thread_num ()
end
integer function omp_get_num_threads ()
end
integer function omp_target_is_present (x, i) bind(c)
import :: c_ptr
type(c_ptr) :: x
integer, value :: i
end
integer function omp_get_cancellation ()
end
end interface
integer :: v
contains
subroutine f1 (a)
integer, target :: a(*)
integer :: i
!$omp simd order(reproducible:concurrent)
do i = 1, 64
!$omp parallel ! { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" }
call foo ()
!$omp end parallel
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
block
integer j
!$omp simd
do j = 1, 64
a(64 * i + j) = i + j
end do
end block
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
!$omp critical ! { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" }
call foo ()
!$omp end critical
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
!$omp ordered simd ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
call foo ()
!$omp end ordered
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
!$omp atomic ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = v + 1
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
!$omp atomic read ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
a(i) = v
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
!$omp atomic write ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = a(i)
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_thread_num () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_num_threads () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_target_is_present (c_loc (a(i)), 0) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp simd order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_cancellation () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
end
subroutine f2 (a)
integer, target :: a(*)
integer :: i
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
!$omp parallel ! { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" }
call foo ()
!$omp end parallel
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
block
integer j
!$omp simd
do j = 1, 64
a(64 * i + j) = i + j
end do
end block
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
!$omp critical ! { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" }
call foo ()
!$omp end critical
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
!$omp ordered simd ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
call foo ()
!$omp end ordered
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
!$omp atomic ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = v + 1
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
!$omp atomic read ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
a(i) = v
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
!$omp atomic write ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = a(i)
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_thread_num () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_num_threads () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_target_is_present (c_loc(a(i)), 0) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do simd order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_cancellation () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
end
subroutine f3 (a)
integer, target :: a(*)
integer :: i
!$omp do order(reproducible:concurrent)
do i = 1, 64
!$omp parallel
call foo ()
!$omp end parallel
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
block
integer j
!$omp simd
do j = 1, 64
a(64 * i + j) = i + j
end do
end block
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
!$omp critical ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
call foo ()
!$omp end critical
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
!$omp ordered simd ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
call foo ()
!$omp end ordered
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
!$omp atomic ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = v + 1
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
!$omp atomic read ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
a(i) = v
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
!$omp atomic write ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = a(i)
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
!$omp task ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
a(i) = a(i) + 1
!$omp end task
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
block
integer j
!$omp taskloop ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
do j = 1, 64
a(64 * i + j) = i + j
end do
end block
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_thread_num () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_num_threads () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_target_is_present (c_loc (a(i)), 0) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do order(reproducible:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_cancellation () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
end
subroutine f4 (a)
integer, target :: a(*)
integer :: i
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
!$omp parallel ! { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" }
call foo ()
!$omp end parallel
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
block
integer j
!$omp simd
do j = 1, 64
a(64 * i + j) = i + j
end do
end block
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
!$omp critical ! { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" }
call foo ()
!$omp end critical
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
!$omp ordered simd ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
call foo ()
!$omp end ordered
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
!$omp atomic ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = v + 1
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
!$omp atomic read ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
a(i) = v
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
!$omp atomic write ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = a(i)
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_thread_num () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_num_threads () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_target_is_present (c_loc (a(i)), 0) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp simd order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_cancellation () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
end
subroutine f5 (a)
integer, target :: a(*)
integer :: i
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
!$omp parallel ! { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" }
call foo ()
!$omp end parallel
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
block
integer j
!$omp simd
do j = 1, 64
a(64 * i + j) = i + j
end do
end block
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
!$omp critical ! { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" }
call foo ()
!$omp end critical
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
!$omp ordered simd ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
call foo ()
!$omp end ordered
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
!$omp atomic ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = v + 1
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
!$omp atomic read ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
a(i) = v
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
!$omp atomic write ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = a(i)
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_thread_num () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_num_threads () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_target_is_present (c_loc (a(i)), 0) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do simd order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_cancellation () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
end
subroutine f6 (a)
integer, target :: a(*)
integer :: i
!$omp do order(unconstrained:concurrent)
do i = 1, 64
!$omp parallel
call foo ()
!$omp end parallel
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
block
integer j
!$omp simd
do j = 1, 64
a(64 * i + j) = i + j
end do
end block
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
!$omp critical ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
call foo ()
!$omp end critical
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
!$omp ordered simd ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
call foo ()
!$omp end ordered
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
!$omp atomic ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = v + 1
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
!$omp atomic read ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
a(i) = v
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
!$omp atomic write ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
v = a(i)
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
!$omp task ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
a(i) = a(i) + 1
!$omp end task
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
block
integer j
!$omp taskloop ! { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" }
do j = 1, 64
a(64 * i + j) = i + j
end do
end block
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_thread_num () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_num_threads () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_target_is_present (c_loc (a(i)), 0) ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
!$omp do order(unconstrained:concurrent)
do i = 1, 64
a(i) = a(i) + omp_get_cancellation () ! { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" }
end do
end
end module m