1! Offloading test checking interaction of mapping a declare target link common 2! block with device_type any to a target region 3! REQUIRES: flang, amdgcn-amd-amdhsa 4! UNSUPPORTED: nvptx64-nvidia-cuda 5! UNSUPPORTED: nvptx64-nvidia-cuda-LTO 6! UNSUPPORTED: aarch64-unknown-linux-gnu 7! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO 8! UNSUPPORTED: x86_64-unknown-linux-gnu 9! UNSUPPORTED: x86_64-unknown-linux-gnu-LTO 10 11! RUN: %libomptarget-compile-fortran-run-and-check-generic 12program main 13 implicit none 14 common /var_common/ var1, var2, var3 15 integer :: var1, var2, var3 16 !$omp declare target link(/var_common/) 17 18 call modify_1 19 20 !$omp target map(tofrom: var2) 21 var2 = var2 + var3 22 !$omp end target 23 24 call modify_2 25 call modify_3 26 27 print *, var1 28 print *, var2 29 print *, var3 30end program 31 32subroutine modify_1 33 common /var_common/ var1, var2, var3 34 integer :: var1, var2, var3 35 36!$omp target map(tofrom: /var_common/) 37 var1 = 10 38 var2 = 20 39 var3 = 30 40!$omp end target 41 42end 43 44subroutine modify_2 45 common /var_common/ var1, var2, var3 46 integer :: var1, var2, var3 47 integer :: copy 48 49!$omp target map(tofrom: copy) 50 copy = var2 + var3 51!$omp end target 52 53 print *, copy 54end 55 56subroutine modify_3 57 common /var_common/ var1, var2, var3 58 integer :: var1, var2, var3 59 60!$omp target map(tofrom: /var_common/) 61 var1 = var1 + var1 62 var2 = var2 + var2 63 var3 = var3 + var3 64!$omp end target 65end 66 67!CHECK: 80 68!CHECK: 20 69!CHECK: 100 70!CHECK: 60