1! { dg-additional-options "-DMEM_SHARED" { target offload_device_shared_as } }
2! { dg-do run }
3!
4! PR middle-end/94635
5  implicit none
6  integer, parameter :: N = 20
7  integer, allocatable, dimension(:) :: my1DPtr
8  integer, dimension(N) :: my1DArr
9  integer :: i
10
11  allocate(my1DPtr(N))
12  my1DPtr = 43
13
14  !$omp target enter data map(alloc: my1DPtr)
15    !$omp target
16      my1DPtr = [(i , i = 1, N)]
17    !$omp end target
18
19    !$omp target map(from: my1DArr)
20      my1DArr = my1DPtr
21    !$omp end target
22  !$omp target exit data map(delete: my1DPtr)
23
24  if (any (my1DArr /= [(i, i = 1, N)])) stop 1
25#if MEM_SHARED
26  if (any (my1DArr /= my1DPtr)) stop 2
27#else
28  if (any (43 /= my1DPtr)) stop 3
29#endif
30
31  my1DPtr = [(2*N-i, i = 1, N)]
32  my1DArr = 42
33
34  !$omp target map(tofrom: my1DArr) map(tofrom: my1DPtr(:))
35    my1DArr = my1DPtr
36    my1DPtr = 20
37  !$omp end target
38
39  if (any (my1DArr /= [(2*N-i, i = 1, N)])) stop 4
40  if (any (20 /= my1DPtr)) stop 6
41end
42