1! { dg-do compile { target { fortran_integer_16 || ilp32 } } }
2! omp_depend_kind = 2*intptr_t --> 16 (128 bit) on 64bit-pointer systems
3!                              --> 8  (128 bit) on 32bit-pointer systems
4subroutine f1
5  !use omp_lib   ! N/A in gcc/testsuite
6  use iso_c_binding, only: c_intptr_t
7  implicit none
8  integer, parameter :: omp_depend_kind = 2*c_intptr_t
9  integer :: a, b
10  integer(kind=omp_depend_kind) :: depobj, depobj1(5)
11  real :: r
12  integer(1) :: d
13
14  !$omp depobj                                       ! { dg-error "Expected '\\( depobj \\)\'" }
15  !$omp depobj(depobj)                               ! { dg-error "Expected DEPEND, UPDATE, or DESTROY clause" }
16  !$omp depobj destroy                               ! { dg-error "Expected '\\( depobj \\)\'" }
17  !$omp depobj ( depobj1 ( 1 ) ) depend( inout : a)  ! OK
18  !$omp depobj(depobj1) depend( inout : a)           ! { dg-error "DEPOBJ in DEPOBJ construct at .1. shall be a scalar integer of OMP_DEPEND_KIND kind" }
19  !$omp depobj(depobj1(:)) depend( inout : a)        ! { dg-error "DEPOBJ in DEPOBJ construct at .1. shall be a scalar integer of OMP_DEPEND_KIND kind" }
20  !$omp depobj(r) depend( inout : a)                 ! { dg-error "DEPOBJ in DEPOBJ construct at .1. shall be a scalar integer of OMP_DEPEND_KIND kind" }
21  !$omp depobj(d) depend( inout : a)                 ! { dg-error "DEPOBJ in DEPOBJ construct at .1. shall be a scalar integer of OMP_DEPEND_KIND kind" }
22  !$omp depobj(depobj) depend( inout : a, b)         ! { dg-error "DEPEND clause at .1. of OMP DEPOBJ construct shall have only a single locator" }
23  !$omp depobj(depobj) depend(mutexinoutset : a)     ! OK
24  !$omp depobj(depobj) depend(source)                ! { dg-error "DEPEND clause at .1. of OMP DEPOBJ construct shall not have dependence-type SOURCE, SINK or DEPOBJ" }
25  !$omp depobj(depobj) depend(sink : i + 1)          ! { dg-error "DEPEND clause at .1. of OMP DEPOBJ construct shall not have dependence-type SOURCE, SINK or DEPOBJ" }
26  !$omp depobj(depobj) update(source)                ! { dg-error "Expected IN, OUT, INOUT, MUTEXINOUTSET followed by '\\)'" }
27  !$omp depobj(depobj) update(sink)                  ! { dg-error "Expected IN, OUT, INOUT, MUTEXINOUTSET followed by '\\)'" }
28  !$omp depobj(depobj) update(depobj)                ! { dg-error "Expected IN, OUT, INOUT, MUTEXINOUTSET followed by '\\)'" }
29
30  ! Valid in OpenMP 5.1:
31  !$omp depobj(depobj5) depend(depobj: depobj3)      ! { dg-error "DEPEND clause at .1. of OMP DEPOBJ construct shall not have dependence-type SOURCE, SINK or DEPOBJ" }
32end subroutine f1
33
34