! { dg-do compile } ! { dg-options "-fopenmp" } module m implicit none integer, parameter :: val = 1 integer, parameter :: ref = 2 integer, parameter :: uval = 3 interface integer function foo (x, y, z) import implicit none integer, value :: x integer :: y, z !$omp declare simd linear (val (x) : step (1)) linear (ref (y) : step (2)) linear (uval (z) : step (3)) ! STEP is a function - thus: ! { dg-error "'x' in LINEAR clause at .1. requires a constant integer linear-step expression or dummy argument specified in UNIFORM clause" "" { target *-*-* } .-3 } ! { dg-error "'y' in LINEAR clause at .1. requires a constant integer linear-step expression or dummy argument specified in UNIFORM clause" "" { target *-*-* } .-4 } ! { dg-error "'z' in LINEAR clause at .1. requires a constant integer linear-step expression or dummy argument specified in UNIFORM clause" "" { target *-*-* } .-5 } end integer function bar (x, y, z) import implicit none integer, value :: x integer :: y, z !$omp declare simd linear (val (x) : val) linear (ref (y) : ref) linear (uval (z) : uval) end integer function baz (x, y, z) import implicit none integer, value :: x integer :: y, z !$omp declare simd linear (val (x) : ref) linear (ref (y) : uval) linear (uval (z) : val) end integer function qux (x, y, z) import implicit none integer, value :: x integer :: y, z !$omp declare simd linear (val (x) : uval) linear (ref (y) : val) linear (uval (z) : ref) end end interface contains integer function step (x) integer, value :: x step = x end end module