! OpenMP offloading regression test that checks we do not cause a segfault when ! implicitly mapping a not present optional allocatable function argument and ! utilise it in the target region. No results requiring checking other than ! that the program compiles and runs to completion with no error. ! REQUIRES: flang, amdgpu ! RUN: %libomptarget-compile-fortran-run-and-check-generic module mod implicit none contains subroutine routine(a, b) implicit none real(4), allocatable, optional, intent(in) :: a(:) real(4), intent(out) :: b(:) integer(4) :: i, ia if(present(a)) then ia = 1 write(*,*) "a is present" else ia=0 write(*,*) "a is not present" end if !$omp target teams distribute parallel do shared(a,b,ia) do i=1,10 if (ia>0) then b(i) = b(i) + a(i) end if end do end subroutine routine end module mod program main use mod implicit none real(4), allocatable :: a(:) real(4), allocatable :: b(:) integer(4) :: i allocate(b(10)) do i=1,10 b(i)=0 end do !$omp target data map(from: b) call routine(b=b) !$omp end target data deallocate(b) print *, "success, no segmentation fault" end program main !CHECK: a is not present !CHECK: success, no segmentation fault