| ! All of the following (up to PROGRAM) are okay: |
| ! |
| subroutine sub |
| interface |
| subroutine sub_iterface() |
| !$omp assumes no_openmp_routines absent(simd) ! OK inferface of an external subroutine/subprogram |
| end |
| end interface |
| !$omp assumes no_openmp_routines absent(simd) ! OK external subroutine/subprogram |
| contains |
| subroutine inner_sub |
| !$omp assumes no_parallelism absent(teams) ! OK internal subroutine/subprogram |
| end |
| end |
| |
| integer function func () |
| !$omp assumes no_openmp_routines absent(simd) ! OK external function/subprogram |
| interface |
| integer function func_iterface() |
| !$omp assumes no_openmp_routines absent(simd) ! OK inferface of an external function/subprogram |
| end |
| end interface |
| func = 0 |
| contains |
| integer function inner_func() |
| !$omp assumes no_parallelism absent(teams) ! OK internal function/subprogram |
| inner_sub2 = 0 |
| end |
| end |
| |
| module m |
| integer ::x |
| !$omp assumes contains(target) holds(x > 0.0) |
| |
| interface |
| subroutine mod_mod_sub_iterface() |
| !$omp assumes no_openmp_routines absent(simd) ! OK inferface of an external subroutine/subprogram |
| end |
| integer function mod_mod_func_iterface() |
| !$omp assumes no_openmp_routines absent(error) ! OK inferface of an external subroutine/subprogram |
| end |
| end interface |
| |
| contains |
| subroutine mod_sub |
| interface |
| subroutine mod_sub_iterface() |
| !$omp assumes no_openmp_routines absent(simd) ! OK inferface of an external subroutine/subprogram |
| end |
| end interface |
| !$omp assumes no_openmp_routines absent(simd) ! OK module subroutine/subprogram |
| contains |
| subroutine mod_inner_sub |
| !$omp assumes no_parallelism absent(teams) ! OK internal subroutine/subprogram |
| end |
| end |
| |
| integer function mod_func () |
| !$omp assumes no_openmp_routines absent(simd) ! OK module function/subprogram |
| interface |
| integer function mod_func_iterface() |
| !$omp assumes no_openmp_routines absent(simd) ! OK inferface of an external function/subprogram |
| end |
| end interface |
| mod_func = 0 |
| contains |
| integer function mod_inner_func() |
| !$omp assumes no_parallelism absent(teams) ! OK internal function/subprogram |
| mod_inner_sub2 = 0 |
| end |
| end |
| end module m |
| |
| |
| ! PROGRAM - invalid as: |
| ! main program is a program unit that is not a subprogram |
| !$omp assumes no_openmp absent(simd) ! { dg-error "must be in the specification part of a subprogram or module" } |
| block |
| ! invalid: block |
| !$omp assumes no_openmp absent(target) ! { dg-error "must be in the specification part of a subprogram or module" } |
| end block |
| end |