40 lines
711 B
Fortran
40 lines
711 B
Fortran
![]() |
! { dg-do run }
|
||
|
|
||
|
module m
|
||
|
contains
|
||
|
integer function foo ()
|
||
|
!$omp declare target to (foo) indirect
|
||
|
foo = 5
|
||
|
end function
|
||
|
|
||
|
integer function bar ()
|
||
|
!$omp declare target to (bar) indirect
|
||
|
bar = 8
|
||
|
end function
|
||
|
|
||
|
integer function baz ()
|
||
|
!$omp declare target to (baz) indirect
|
||
|
baz = 11
|
||
|
end function
|
||
|
end module
|
||
|
|
||
|
program main
|
||
|
use m
|
||
|
implicit none
|
||
|
|
||
|
integer :: x, expected
|
||
|
procedure (foo), pointer :: foo_ptr, bar_ptr, baz_ptr
|
||
|
|
||
|
foo_ptr => foo
|
||
|
bar_ptr => bar
|
||
|
baz_ptr => baz
|
||
|
|
||
|
expected = foo () + bar () + baz ()
|
||
|
|
||
|
!$omp target map (to: foo_ptr, bar_ptr, baz_ptr) map (from: x)
|
||
|
x = foo_ptr () + bar_ptr () + baz_ptr ()
|
||
|
!$omp end target
|
||
|
|
||
|
stop x - expected
|
||
|
end program
|