! { dg-do compile } module m integer :: i end module m subroutine f1 type t integer :: i end type t interface integer function f3 (a, b) !$omp declare simd (f3) uniform (a) use m import :: t implicit none type (t) :: a integer :: b end function f3 end interface interface integer function f4 (a, b) use m !$omp declare simd (f4) uniform (a) import :: t implicit none type (t) :: a integer :: b end function f4 end interface interface integer function f5 (a, b) use m import :: t !$omp declare simd (f5) uniform (a) implicit none type (t) :: a integer :: b end function f5 end interface interface integer function f6 (a, b) use m import :: t implicit none !$omp declare simd (f6) uniform (a) type (t) :: a integer :: b end function f6 end interface interface integer function f7 (a, b) use m import :: t implicit none type (t) :: a !$omp declare simd (f7) uniform (a) integer :: b end function f7 end interface call f2 contains subroutine f2 !$omp threadprivate (t1) use m !$omp threadprivate (t2) implicit none !$omp threadprivate (t3) integer, save :: t1, t2, t3, t4 !$omp threadprivate (t4) t1 = 1; t2 = 2; t3 = 3; t4 = 4 end subroutine f2 subroutine f8 !$omp declare reduction (f8_1:real:omp_out = omp_out + omp_in) use m !$omp declare reduction (f8_2:real:omp_out = omp_out + omp_in) implicit none !$omp declare reduction (f8_3:real:omp_out = omp_out + omp_in) integer :: j !$omp declare reduction (f8_4:real:omp_out = omp_out + omp_in) end subroutine f8 subroutine f9 !$omp declare target (f9_1) use m !$omp declare target (f9_2) implicit none !$omp declare target (f9_3) !$omp declare target integer, save :: f9_1, f9_2, f9_3, f9_4 !$omp declare target (f9_4) f9_1 = 1; f9_2 = 2; f9_3 = 3; f9_4 = 4 end subroutine f9 end subroutine f1