| !RUN: %python %S/../test_errors.py %s %flang -fopenmp | |
| ! Positive tests for default(none) | |
| subroutine sb2(x) | |
| real :: x | |
| end subroutine | |
| subroutine sb1 | |
| integer :: i | |
| real :: a(10), b(10), k | |
| inc(x) = x + 1.0 | |
| abstract interface | |
| function iface(a, b) | |
| real, intent(in) :: a, b | |
| real :: iface | |
| end function | |
| end interface | |
| procedure(iface) :: compute | |
| procedure(iface), pointer :: ptr => NULL() | |
| ptr => fn2 | |
| !$omp parallel default(none) shared(a,b,k) private(i) | |
| do i = 1, 10 | |
| b(i) = k + sin(a(i)) + inc(a(i)) + fn1(a(i)) + compute(a(i),k) + add(k, k) | |
| call sb3(b(i)) | |
| call sb2(a(i)) | |
| end do | |
| !$omp end parallel | |
| contains | |
| function fn1(x) | |
| real :: x, fn1 | |
| fn1 = x | |
| end function | |
| function fn2(x, y) | |
| real, intent(in) :: x, y | |
| real :: fn2 | |
| fn2 = x + y | |
| end function | |
| subroutine sb3(x) | |
| real :: x | |
| print *, x | |
| end subroutine | |
| end subroutine | |
| !construct-name inside default(none) | |
| subroutine sb4 | |
| !$omp parallel default(none) | |
| loop: do i = 1, 10 | |
| end do loop | |
| !$omp end parallel | |
| end subroutine | |
| ! Test that default(none) does not error for assumed-size array | |
| subroutine sub( aaa) | |
| real,dimension(*),intent(in)::aaa | |
| integer::ip | |
| real::ccc | |
| !$omp parallel do private(ip,ccc) default(none) | |
| do ip = 1, 10 | |
| ccc= aaa(ip) | |
| end do | |
| end subroutine sub | |
| ! Test that threadprivate variables with host association | |
| ! have a predetermined DSA | |
| subroutine host_assoc() | |
| integer, save :: i | |
| !$omp threadprivate(i) | |
| real, save :: r | |
| !$omp threadprivate(r) | |
| contains | |
| subroutine internal() | |
| !$omp parallel default(none) | |
| print *, i, r | |
| !$omp end parallel | |
| end subroutine internal | |
| end subroutine host_assoc |