| ! Offload test that ensures defaultmap(tofrom: scalar) does not suppress | |
| ! implicit default mapper generation for allocatable derived types. | |
| ! REQUIRES: flang, amdgpu | |
| ! RUN: %libomptarget-compile-fortran-run-and-check-generic | |
| program defaultmap_implicit_mapper | |
| implicit none | |
| type :: payload_t | |
| integer, allocatable :: arr(:) | |
| end type payload_t | |
| type(payload_t), allocatable :: obj | |
| integer, parameter :: n = 8 | |
| integer :: i | |
| integer :: scalar | |
| logical :: ok | |
| allocate(obj) | |
| allocate(obj%arr(n)) | |
| obj%arr = 1 | |
| scalar = 2 | |
| !$omp target defaultmap(tofrom: scalar) | |
| do i = 1, n | |
| obj%arr(i) = obj%arr(i) + scalar | |
| end do | |
| scalar = 7 | |
| !$omp end target | |
| ok = .true. | |
| do i = 1, n | |
| if (obj%arr(i) /= 3) ok = .false. | |
| end do | |
| if (scalar /= 7) ok = .false. | |
| if (ok) then | |
| print *, "Test passed!" | |
| else | |
| print *, "Test failed!" | |
| print *, obj%arr | |
| print *, scalar | |
| end if | |
| deallocate(obj%arr) | |
| deallocate(obj) | |
| end program defaultmap_implicit_mapper | |
| ! CHECK: Test passed! |