| ! Offloading test checking interaction of |
| ! mapping a member of a common block to a |
| ! target region |
| ! REQUIRES: flang, amdgcn-amd-amdhsa |
| ! UNSUPPORTED: nvptx64-nvidia-cuda |
| ! UNSUPPORTED: nvptx64-nvidia-cuda-LTO |
| ! UNSUPPORTED: aarch64-unknown-linux-gnu |
| ! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO |
| ! UNSUPPORTED: x86_64-unknown-linux-gnu |
| ! UNSUPPORTED: x86_64-unknown-linux-gnu-LTO |
| |
| ! RUN: %libomptarget-compile-fortran-run-and-check-generic |
| program main |
| implicit none |
| common /var_common/ var1, var2 |
| integer :: var1, var2 |
| |
| call modify_1 |
| |
| !$omp target map(tofrom: var1) |
| var1 = var1 + 20 |
| !$omp end target |
| |
| call modify_2 |
| |
| print *, var1 |
| print *, var2 |
| end program |
| |
| subroutine modify_1 |
| common /var_common/ var1, var2 |
| integer :: var1, var2 |
| !$omp target map(tofrom: var1) |
| var1 = var1 + 20 |
| !$omp end target |
| end |
| |
| subroutine modify_2 |
| common /var_common/ var1, var2 |
| integer :: var1, var2 |
| !$omp target map(tofrom: var1) |
| var1 = var1 * 10 |
| !$omp end target |
| end |
| |
| !CHECK: 400 |
| !CHECK: 0 |