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