Files
clang-p2996/flang/test/Semantics/omp-do04.f90
Peixin-Qiao c207e36025 [flang] Enforce a program not including more than one main program
As Fortran 2018 5.2.2 states, a program shall consist of exactly one
main program. Add this semantic check.

Reviewed By: klausler

Differential Revision: https://reviews.llvm.org/D125186
2022-05-09 10:48:06 +08:00

105 lines
2.0 KiB
Fortran

! RUN: %python %S/test_errors.py %s %flang_fc1 -fopenmp
! OpenMP Version 4.5
! 2.7.1 Loop Construct
! The loop iteration variable may not appear in a threadprivate directive.
subroutine omp_do
integer, save:: i, j, k,n
!$omp threadprivate(k,j,i)
!$omp do collapse(2)
!ERROR: Loop iteration variable i is not allowed in THREADPRIVATE.
do i = 1, 10
!ERROR: Loop iteration variable j is not allowed in THREADPRIVATE.
do j = 1, 10
print *, "Hello"
end do
end do
!$omp end do
end subroutine omp_do
subroutine omp_do1
integer, save :: i, j, k
!$omp threadprivate(k,j,i)
!$omp do
!ERROR: Loop iteration variable i is not allowed in THREADPRIVATE.
do i = 1, 10
do j = 1, 10
print *, "Hello"
end do
end do
!$omp end do
end subroutine omp_do1
subroutine omp_do2
integer, save :: k, j
!$omp threadprivate(k)
!$omp threadprivate(j)
call compute()
contains
subroutine compute()
!$omp do ordered(1) collapse(1)
!ERROR: Loop iteration variable k is not allowed in THREADPRIVATE.
foo: do k = 1, 10
do i = 1, 10
print *, "Hello"
end do
end do foo
!$omp end do
end subroutine
end subroutine omp_do2
subroutine omp_do3
integer, save :: i
!$omp threadprivate(i)
!$omp parallel
print *, "parallel"
!$omp end parallel
!$omp do
!ERROR: Loop iteration variable i is not allowed in THREADPRIVATE.
do i = 1, 10
do j = 1, 10
print *, "Hello"
end do
end do
!$omp end do
end subroutine omp_do3
module tp
!integer i,j
integer, save:: i, j, k,n
!$omp threadprivate(i)
!$omp threadprivate(j)
end module tp
module usetp
use tp
end module usetp
subroutine main
use usetp
!$omp do
!ERROR: Loop iteration variable i is not allowed in THREADPRIVATE.
do i = 1, 10
do j = 1, 10
print *, "Hello"
end do
end do
!$omp end do
end subroutine
subroutine main1
use tp
!$omp do
!ERROR: Loop iteration variable j is not allowed in THREADPRIVATE.
do j = 1, 10
do i = 1, 10
print *, "Hello"
end do
end do
!$omp end do
end subroutine