| ! RUN: %flang -fsyntax-only -fopenmp %s 2>&1 |
| |
| ! Check that OpenMP declarative directives can be used with objects that have |
| ! an incomplete type. |
| |
| subroutine test_decl |
| ! OMPv5.2 5.2 threadprivate |
| ! OMPv5.2 6.5 allocate |
| implicit none |
| save :: x1, y1 |
| !$omp threadprivate(x1) |
| !$omp allocate(y1) |
| integer :: x1, y1 |
| |
| ! OMPv5.2 7.7 declare-simd |
| external :: simd_func |
| !$omp declare simd(simd_func) |
| logical :: simd_func |
| |
| ! OMPv5.2 7.8.1 declare-target |
| allocatable :: j |
| !$omp declare target(j) |
| save :: j |
| real(kind=8) :: j(:) |
| |
| ! OMPv5.2 5.5.11 declare-reduction - crashes |
| !external :: my_add_red |
| !!$omp declare reduction(my_add_red : integer : my_add_red(omp_out, omp_in)) & |
| !!$omp& initializer(omp_priv=0) |
| !integer :: my_add_red |
| end subroutine |
| |
| subroutine test_decl2 |
| save x1, y1 |
| !$omp threadprivate(x1) |
| !$omp allocate(y1) |
| integer :: x1, y1 |
| |
| ! implicit decl |
| !$omp threadprivate(x2) |
| !$omp allocate(y2) |
| save x2, y2 |
| end subroutine |
| |
| module m1 |
| ! implicit decl |
| !$omp threadprivate(x, y, z) |
| integer :: y |
| real :: z |
| |
| contains |
| subroutine sub |
| !$omp parallel copyin(x, y, z) |
| !$omp end parallel |
| end subroutine |
| end module |