1 ! Based on libgomp.c/target-23.c
3 ! { dg-additional-options "-fdump-tree-original" }
4 ! { dg-final { scan-tree-dump "omp target update to\\(xxs\\\[3\\\] \\\[len: 2\\\]\\)" "original" } }
5 ! { dg-final { scan-tree-dump "omp target update to\\(s\\.s \\\[len: 4\\\]\\)" "original" } }
6 ! { dg-final { scan-tree-dump "omp target update from\\(s\\.s \\\[len: 4\\\]\\)" "original" } }
12 integer, pointer :: u(:) => null()
15 integer, volatile :: z
21 integer, target
:: u(0:9) = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
24 integer, pointer :: v(:)
25 integer(kind
=2) :: xxs(5)
27 s
= S_type(9, v
=[10, 11, 12, 13, 14])
30 xxs
= [-1,-2,-3,-4,-5]
31 !$omp target enter data map (to: s%s, s%u, s%u(0:5)) map (alloc: s%v(1:4), xxs(3:5))
38 !$omp target update to (xxs(4))
39 !$omp target update to (s%s) to (s%u(0:2), s%v(1:4))
41 !$omp target map (alloc: s%s, s%v(1:4)) map (from: err)
43 if (s
%s
/= 10 .or
. s
%v(1) /= 12 .or
. s
%v(2) /= 12 .or
. s
%v(3) /= 13) &
45 if (v(-1) /= 4 .or
. v(0) /= 4 .or
. v(1) /= 5 .or
. v(2) /= 6 .or
. v(3) /= 7) &
58 !$omp target map (alloc: s%u(0:5))
60 if (s
%u(0) /= 5 .or
. s
%u(1) /= 4 .or
. s
%u(2) /= 5 .or
. s
%u(3) /= 6 .or
. s
%u(4) /= 9) &
65 !$omp target update from (s%s, s%u(0:5)) from (s%v(1:4))
66 if (err
.or
. s
%s
/= 11 .or
. u(0) /= 0 .or
. u(1) /= 1 .or
. u(2) /= 2 .or
. u(3) /= 5 &
67 .or
. u(4) /= 12 .or
. u(5) /= 5 .or
. u(6) /= 6 .or
. u(7) /= 9 .or
. u(8) /= 8 &
68 .or
. u(9) /= 9 .or
. s
%v(0) /= 10 .or
. s
%v(1) /= 12 .or
. s
%v(2) /= 14 &
69 .or
. s
%v(3) /= 13 .or
. s
%v(4) /= 14) &
71 ! !$omp target exit data map (release: s%s)
72 ! !$omp target exit data map (release: s%u(0:5))
73 ! !$omp target exit data map (delete: s%v(1:4))
74 ! !$omp target exit data map (release: s%s)