1*37234499Sagozillon! Offloading test checking interaction of pointers with target in different 2*37234499Sagozillon! 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 enter data map(alloc: arg_alloc) 12330d8983SJohannes Doerfert 13330d8983SJohannes Doerfert !$omp target 14330d8983SJohannes Doerfert do index = 1, 10 15330d8983SJohannes Doerfert arg_alloc(index) = arg_alloc(index) + index 16330d8983SJohannes Doerfert end do 17330d8983SJohannes Doerfert !$omp end target 18330d8983SJohannes Doerfert 19330d8983SJohannes Doerfert !$omp target exit data map(from: arg_alloc) 20330d8983SJohannes Doerfert 21330d8983SJohannes Doerfert !$omp target exit data map(delete: arg_alloc) 22330d8983SJohannes Doerfert 23330d8983SJohannes Doerfert print *, arg_alloc 24330d8983SJohannes Doerfert end subroutine func_arg 25330d8983SJohannes Doerfertend module 26330d8983SJohannes Doerfert 27330d8983SJohannes Doerfertsubroutine func 28330d8983SJohannes Doerfert integer, pointer :: local_alloc(:) 29330d8983SJohannes Doerfert allocate(local_alloc(10)) 30330d8983SJohannes Doerfert 31330d8983SJohannes Doerfert !$omp target enter data map(alloc: local_alloc) 32330d8983SJohannes Doerfert 33330d8983SJohannes Doerfert !$omp target 34330d8983SJohannes Doerfert do index = 1, 10 35330d8983SJohannes Doerfert local_alloc(index) = index 36330d8983SJohannes Doerfert end do 37330d8983SJohannes Doerfert !$omp end target 38330d8983SJohannes Doerfert 39330d8983SJohannes Doerfert !$omp target exit data map(from: local_alloc) 40330d8983SJohannes Doerfert 41330d8983SJohannes Doerfert !$omp target exit data map(delete: local_alloc) 42330d8983SJohannes Doerfert 43330d8983SJohannes Doerfert print *, local_alloc 44330d8983SJohannes Doerfert 45330d8983SJohannes Doerfert deallocate(local_alloc) 46330d8983SJohannes Doerfertend subroutine func 47330d8983SJohannes Doerfert 48330d8983SJohannes Doerfert 49330d8983SJohannes Doerfertprogram main 50330d8983SJohannes Doerfert use test 51330d8983SJohannes Doerfert integer, pointer :: map_ptr(:) 52330d8983SJohannes Doerfert allocate(map_ptr(10)) 53330d8983SJohannes Doerfert 54330d8983SJohannes Doerfert !$omp target enter data map(alloc: map_ptr) 55330d8983SJohannes Doerfert 56330d8983SJohannes Doerfert !$omp target 57330d8983SJohannes Doerfert do index = 1, 10 58330d8983SJohannes Doerfert map_ptr(index) = index 59330d8983SJohannes Doerfert end do 60330d8983SJohannes Doerfert !$omp end target 61330d8983SJohannes Doerfert 62330d8983SJohannes Doerfert !$omp target exit data map(from: map_ptr) 63330d8983SJohannes Doerfert 64330d8983SJohannes Doerfert !$omp target exit data map(delete: map_ptr) 65330d8983SJohannes Doerfert 66330d8983SJohannes Doerfert call func 67330d8983SJohannes Doerfert 68330d8983SJohannes Doerfert print *, map_ptr 69330d8983SJohannes Doerfert 70330d8983SJohannes Doerfert call func_arg(map_ptr) 71330d8983SJohannes Doerfert 72330d8983SJohannes Doerfert deallocate(map_ptr) 73330d8983SJohannes Doerfertend program 74330d8983SJohannes Doerfert 75330d8983SJohannes Doerfert! CHECK: 1 2 3 4 5 6 7 8 9 10 76330d8983SJohannes Doerfert! CHECK: 1 2 3 4 5 6 7 8 9 10 77330d8983SJohannes Doerfert! CHECK: 2 4 6 8 10 12 14 16 18 20 78