| ! 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 |