1! { dg-do compile } 2! { dg-options "-fopenmp -fdump-tree-original" } 3 4! PR fortran/78260 5 6module m 7 implicit none 8 integer :: n = 0 9contains 10 integer function f1() 11 !$omp target data map(f1) 12 !$omp target update to(f1) 13 f1 = 5 14 !$omp end target data 15 end function f1 16 17 integer function f2() 18 dimension :: f2(1) 19 !$omp target data map(f2) 20 !$omp target update to(f2) 21 f2(1) = 5 22 !$omp end target data 23 end function f2 24 25 integer function f3() result(res) 26 dimension :: res(1) 27 !$omp target data map(res) 28 !$omp target update to(res) 29 res(1) = 5 30 !$omp end target data 31 end function f3 32 33 integer function f4() result(res) 34 allocatable :: res 35 dimension :: res(:) 36 !$omp target data map(res) 37 !$omp target update to(res) 38 res = [5] 39 !$omp end target data 40 end function f4 41 42 subroutine sub() 43 integer, allocatable :: arr(:) 44 !$omp target data map(arr) 45 !$omp target update to(arr) 46 arr = [5] 47 !$omp end target data 48 end subroutine sub 49end module m 50 51! { dg-final { scan-tree-dump-times "#pragma omp target data map\\(tofrom:\\*\\(c_char \\*\\) arr.data \\\[len: D.\[0-9\]+ \\* 4\\\]\\) map\\(to:arr \\\[pointer set, len: ..\\\]\\) map\\(alloc:\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) arr.data \\\[pointer assign, bias: 0\\\]\\)" 1 "original" } } 52! { dg-final { scan-tree-dump-times "#pragma omp target update to\\(\\*\\(c_char \\*\\) arr.data \\\[len: D.\[0-9\]+ \\* 4\\\]\\)" 1 "original" } } 53! { dg-final { scan-tree-dump-times "#pragma omp target data map\\(tofrom:\\*\\(c_char \\*\\) __result->data \\\[len: D.\[0-9\]+ \\* 4\\\]\\) map\\(to:\\*__result \\\[pointer set, len: ..\\\]\\) map\\(alloc:\\(integer\\(kind=4\\)\\\[0:\\\] \\* restrict\\) __result->data \\\[pointer assign, bias: 0\\\]\\) map\\(alloc:__result \\\[pointer assign, bias: 0\\\]\\)" 1 "original" } } 54! { dg-final { scan-tree-dump-times "#pragma omp target update to\\(\\*\\(c_char \\*\\) __result->data \\\[len: D.\[0-9\]+ \\* 4\\\]\\)" 1 "original" } } 55! { dg-final { scan-tree-dump-times "#pragma omp target data map\\(tofrom:\\*__result.0\\) map\\(alloc:__result.0 \\\[pointer assign, bias: 0\\\]\\)" 2 "original" } } 56! { dg-final { scan-tree-dump-times "#pragma omp target update to\\(\\*__result.0\\)" 2 "original" } } 57! { dg-final { scan-tree-dump-times "#pragma omp target data map\\(tofrom:__result_f1\\)" 1 "original" } } 58! { dg-final { scan-tree-dump-times "#pragma omp target update to\\(__result_f1\\)" 1 "original" } } 59 60