1! { dg-additional-options "-fdump-tree-original" }
2! { dg-additional-options "-fdump-tree-gimple" }
3!
4! PR fortran/92568
5!
6implicit none
7  type t
8  end type t
9
10  integer :: ii
11  integer :: arr(5)
12  integer, allocatable :: aii, aarr(:)
13  integer, pointer :: pii, parr(:)
14
15  character :: str1, str1arr(5), str1a, str1aarr(:), str1p, str1parr(:)
16  character(len=5) :: str5, str5arr(5), str5a, str5aarr(:), str5p, str5parr(:)
17  character(len=:) :: strXa, strXaarr(:), strXp, strXparr(:)
18  allocatable :: str1a, str1aarr, str5a, str5aarr, strXa, strXaarr
19  pointer :: str1p, str1parr, str5p, str5parr, strXp, strXparr
20
21  type(t) :: dt, dtarr(5), dta, dtaarr(:), dtp, dtparr(:)
22  allocatable :: dta, dtaarr
23  pointer :: dtp, dtparr
24
25  allocate(aii, aarr(5), str1a, str1aarr(5), dta, dtparr(5))
26  allocate(pii, parr(5), str1p, str1parr(5), dtp, dtparr(5))
27  allocate(character(len=7) :: strXa, strXaarr(5), strXp, strXparr(5))
28
29
30  !$omp target defaultmap ( none )  &
31  !$omp&  map(tofrom: ii, arr, aii, aarr, pii, parr)  &
32  !$omp&  map(tofrom: str1, str1arr, str1a, str1aarr, str1p, str1parr)  &
33  !$omp&  map(tofrom: str5, str5arr, str5a, str5aarr, str5p, str5parr)  &
34  !$omp&  map(tofrom: strXa, strXaarr, strXp, strXparr)  &
35  !$omp&  map(tofrom: dt, dtarr, dta, dtaarr, dtp, dtparr)
36    ii = 42; arr = 42; aii = 42; aarr = 42; pii = 42; parr = 42
37    str1 = ""; str1arr = ""; str1a = ""; str1aarr = ""; str1p = ""; str1parr = ""
38    str5 = ""; str5arr = ""; str5a = ""; str5aarr = ""; str5p = ""; str5parr = ""
39    strXa = ""; strXaarr = ""; strXp = ""; strXparr = ""
40    dt = t(); dtarr = t(); dta = t(); dtaarr = t(); dtp = t(); dtparr = t()
41  !$omp end target
42
43
44  !$omp target defaultmap(none : scalar)  defaultmap(none : aggregate)  &
45  !$omp&       defaultmap(none : allocatable) defaultmap(none : pointer) &
46  !$omp&  map(alloc: ii, arr, aii, aarr, pii, parr)  &
47  !$omp&  map(alloc: str1, str1arr, str1a, str1aarr, str1p, str1parr)  &
48  !$omp&  map(alloc: str5, str5arr, str5a, str5aarr, str5p, str5parr)  &
49  !$omp&  map(alloc: strXa, strXaarr, strXp, strXparr)  &
50  !$omp&  map(alloc: dt, dtarr, dta, dtaarr, dtp, dtparr)
51    ii = 42; arr = 42; aii = 42; aarr = 42; pii = 42; parr = 42
52    str1 = ""; str1arr = ""; str1a = ""; str1aarr = ""; str1p = ""; str1parr = ""
53    str5 = ""; str5arr = ""; str5a = ""; str5aarr = ""; str5p = ""; str5parr = ""
54    strXa = ""; strXaarr = ""; strXp = ""; strXparr = ""
55    dt = t(); dtarr = t(); dta = t(); dtaarr = t(); dtp = t(); dtparr = t()
56  !$omp end target
57end
58
59! { dg-final { scan-tree-dump-times "#pragma omp target map\\(tofrom:.* defaultmap\\(none\\)" 1 "original" } }
60! { dg-final { scan-tree-dump-times "#pragma omp target map\\(alloc:.* defaultmap\\(none:scalar\\) defaultmap\\(none:aggregate\\) defaultmap\\(none:allocatable\\) defaultmap\\(none:pointer\\)" 1 "original" } }
61