| ! 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 |