1*37234499Sagozillon! Offloading test checking interaction of pointer and target with target across 2*37234499Sagozillon! multiple scopes 388234488SEthan Luis McDonough! REQUIRES: flang, amdgpu 4330d8983SJohannes Doerfert 5330d8983SJohannes Doerfert! RUN: %libomptarget-compile-fortran-run-and-check-generic 6330d8983SJohannes Doerfertmodule test 7330d8983SJohannes Doerfert contains 8330d8983SJohannes Doerfert subroutine func_arg(arg_alloc) 9330d8983SJohannes Doerfert integer, pointer, intent (inout) :: arg_alloc(:) 10330d8983SJohannes Doerfert 11330d8983SJohannes Doerfert !$omp target map(tofrom: arg_alloc) 12330d8983SJohannes Doerfert do index = 1, 10 13330d8983SJohannes Doerfert arg_alloc(index) = arg_alloc(index) + index 14330d8983SJohannes Doerfert end do 15330d8983SJohannes Doerfert !$omp end target 16330d8983SJohannes Doerfert 17330d8983SJohannes Doerfert print *, arg_alloc 18330d8983SJohannes Doerfert end subroutine func_arg 19330d8983SJohannes Doerfertend module 20330d8983SJohannes Doerfert 21330d8983SJohannes Doerfertsubroutine func 22330d8983SJohannes Doerfert integer, pointer :: local_alloc(:) 23330d8983SJohannes Doerfert integer, target :: b(10) 24330d8983SJohannes Doerfert local_alloc => b 25330d8983SJohannes Doerfert 26330d8983SJohannes Doerfert !$omp target map(tofrom: local_alloc) 27330d8983SJohannes Doerfert do index = 1, 10 28330d8983SJohannes Doerfert local_alloc(index) = index 29330d8983SJohannes Doerfert end do 30330d8983SJohannes Doerfert !$omp end target 31330d8983SJohannes Doerfert 32330d8983SJohannes Doerfert print *, local_alloc 33330d8983SJohannes Doerfert end subroutine func 34330d8983SJohannes Doerfert 35330d8983SJohannes Doerfert 36330d8983SJohannes Doerfert program main 37330d8983SJohannes Doerfert use test 38330d8983SJohannes Doerfert integer, pointer :: map_ptr(:) 39330d8983SJohannes Doerfert integer, target :: b(10) 40330d8983SJohannes Doerfert 41330d8983SJohannes Doerfert map_ptr => b 42330d8983SJohannes Doerfert 43330d8983SJohannes Doerfert !$omp target map(tofrom: map_ptr) 44330d8983SJohannes Doerfert do index = 1, 10 45330d8983SJohannes Doerfert map_ptr(index) = index 46330d8983SJohannes Doerfert end do 47330d8983SJohannes Doerfert !$omp end target 48330d8983SJohannes Doerfert 49330d8983SJohannes Doerfert call func 50330d8983SJohannes Doerfert 51330d8983SJohannes Doerfert print *, map_ptr 52330d8983SJohannes Doerfert 53330d8983SJohannes Doerfert call func_arg(map_ptr) 54330d8983SJohannes Doerfertend program 55330d8983SJohannes Doerfert 56330d8983SJohannes Doerfert!CHECK: 1 2 3 4 5 6 7 8 9 10 57330d8983SJohannes Doerfert!CHECK: 1 2 3 4 5 6 7 8 9 10 58330d8983SJohannes Doerfert!CHECK: 2 4 6 8 10 12 14 16 18 20 59