| ! OpenMP offloading test that checks we do not cause a segfault when mapping | |
| ! optional function arguments (present or otherwise). No results requiring | |
| ! checking other than that the program compiles and runs to completion with no | |
| ! error. This particular variation checks that we're correctly emitting the | |
| ! load/store in both branches mapping the input array. | |
| ! REQUIRES: flang, amdgpu | |
| ! RUN: %libomptarget-compile-fortran-run-and-check-generic | |
| module reproducer_mod | |
| contains | |
| subroutine branching_target_call(dt, switch) | |
| implicit none | |
| real(4), dimension(:), intent(inout) :: dt | |
| logical, intent(in) :: switch | |
| integer :: dim, idx | |
| dim = size(dt) | |
| if (switch) then | |
| !$omp target teams distribute parallel do | |
| do idx = 1, dim | |
| dt(idx) = 20 | |
| end do | |
| else | |
| !$omp target teams distribute parallel do | |
| do idx = 1, dim | |
| dt(idx) = 30 | |
| end do | |
| end if | |
| end subroutine branching_target_call | |
| end module reproducer_mod | |
| program reproducer | |
| use reproducer_mod | |
| implicit none | |
| real(4), dimension(:), allocatable :: dt | |
| integer :: n = 21312 | |
| integer :: i | |
| allocate (dt(n)) | |
| call branching_target_call(dt, .FALSE.) | |
| call branching_target_call(dt, .TRUE.) | |
| print *, "PASSED" | |
| end program reproducer | |
| ! CHECK: PASSED |