Files
clang-p2996/flang/test/Semantics/OpenMP/declarative-directive02.f90
Leandro Lupori a1ac5a57ae [flang] Allow OpenMP declarations before type declarations (#112414)
Skip resolving implicit types for OpenMP declarative directives, to
allow them to appear before type declarations, which is supported
by several compilers. This was discussed in

https://discourse.llvm.org/t/rfc-openmp-should-type-declaration-be-allowed-after-threadprivate/81345.

This fixes the semantic errors of
https://github.com/llvm/llvm-project/issues/106021.
2024-10-17 11:32:21 -03:00

57 lines
1.1 KiB
Fortran

! 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