| ! Offloading test checking interaction of allocatables with target in different | |
| ! scopes | |
| ! REQUIRES: flang, amdgpu | |
| ! RUN: %libomptarget-compile-fortran-run-and-check-generic | |
| module test | |
| contains | |
| subroutine func_arg(arg_alloc) | |
| integer, allocatable, intent (inout) :: arg_alloc(:) | |
| !$omp target map(tofrom: arg_alloc) | |
| do index = 1, 10 | |
| arg_alloc(index) = arg_alloc(index) + index | |
| end do | |
| !$omp end target | |
| print *, arg_alloc | |
| end subroutine func_arg | |
| end module | |
| subroutine func | |
| integer, allocatable :: local_alloc(:) | |
| allocate(local_alloc(10)) | |
| !$omp target map(tofrom: local_alloc) | |
| do index = 1, 10 | |
| local_alloc(index) = index | |
| end do | |
| !$omp end target | |
| print *, local_alloc | |
| deallocate(local_alloc) | |
| end subroutine func | |
| program main | |
| use test | |
| integer, allocatable :: map_ptr(:) | |
| allocate(map_ptr(10)) | |
| !$omp target map(tofrom: map_ptr) | |
| do index = 1, 10 | |
| map_ptr(index) = index | |
| end do | |
| !$omp end target | |
| call func | |
| print *, map_ptr | |
| call func_arg(map_ptr) | |
| deallocate(map_ptr) | |
| end program | |
| ! CHECK: 1 2 3 4 5 6 7 8 9 10 | |
| ! CHECK: 1 2 3 4 5 6 7 8 9 10 | |
| ! CHECK: 2 4 6 8 10 12 14 16 18 20 |