xref: /llvm-project/offload/test/offloading/fortran/target-map-pointer-target-scopes.f90 (revision 372344995568cae076477a8b0e98fcdec7c49379)
1! Offloading test checking interaction of pointer and target with target across
2! multiple scopes
3! REQUIRES: flang, amdgpu
4
5! RUN: %libomptarget-compile-fortran-run-and-check-generic
6module test
7    contains
8  subroutine func_arg(arg_alloc)
9    integer,  pointer, intent (inout) :: arg_alloc(:)
10
11  !$omp target map(tofrom: arg_alloc)
12    do index = 1, 10
13      arg_alloc(index) = arg_alloc(index) + index
14    end do
15  !$omp end target
16
17    print *, arg_alloc
18  end subroutine func_arg
19end module
20
21subroutine func
22   integer,  pointer :: local_alloc(:)
23   integer, target :: b(10)
24   local_alloc => b
25
26  !$omp target map(tofrom: local_alloc)
27    do index = 1, 10
28      local_alloc(index) = index
29    end do
30  !$omp end target
31
32    print *, local_alloc
33  end subroutine func
34
35
36  program main
37  use test
38  integer,  pointer :: map_ptr(:)
39  integer, target :: b(10)
40
41  map_ptr => b
42
43  !$omp target map(tofrom: map_ptr)
44    do index = 1, 10
45      map_ptr(index) = index
46    end do
47  !$omp end target
48
49   call func
50
51   print *, map_ptr
52
53   call func_arg(map_ptr)
54end program
55
56!CHECK: 1 2 3 4 5 6 7 8 9 10
57!CHECK: 1 2 3 4 5 6 7 8 9 10
58!CHECK: 2 4 6 8 10 12 14 16 18 20
59