| ! { dg-do compile } |
| |
| module m |
| implicit none (type, external) |
| contains |
| real function add(x, y, j) result(res) |
| !$omp declare simd(add) uniform(x, y) linear(j : 1) simdlen(4) |
| integer, value :: j |
| real, intent(in) :: x(*), y(*) |
| res = x(j) + y(j) |
| end function |
| end module m |
| |
| program main |
| use m |
| implicit none (type, external) |
| real, allocatable :: A(:), B(:), C(:) |
| integer :: i, N |
| N = 128 |
| A = [(3*i, i = 1, N)] |
| B = [(7*i, i = 1, N)] |
| allocate (C(N)) |
| |
| !$omp simd |
| do i = 1, N |
| C(i) = add(A, B, i) |
| end do |
| |
| if (any (C /= [(10*i, i = 1, N)])) error stop |
| end program main |