! Test 'allocatable' with OpenMP 'target' 'map' clauses. ! See also '../libgomp.oacc-fortran/allocatable-1-1.f90'. ! { dg-do run } ! { dg-additional-options "-cpp" } ! { dg-additional-options "-DMEM_SHARED" { target offload_device_shared_as } } program main implicit none integer, allocatable :: a, b, c, d, e allocate (a) a = 11 b = 25 ! Implicit allocation. c = 52 ! Implicit allocation. !No 'allocate (d)' here. !No 'allocate (e)' here. !$omp target map(to: a) map(tofrom: b, c, d) map(from: e) if (.not. allocated (a)) stop 1 if (a .ne. 11) stop 2 a = 33 if (.not. allocated (b)) stop 3 if (b .ne. 25) stop 4 if (.not. allocated (c)) stop 5 if (c .ne. 52) stop 6 c = 10 if (allocated (d)) stop 7 d = 42 ! Implicit allocation, but on device only. if (.not. allocated (d)) stop 8 deallocate (d) ! OpenMP requires must be "unallocated upon exit from the region". if (allocated (e)) stop 9 e = 24 ! Implicit allocation, but on device only. if (.not. allocated (e)) stop 10 deallocate (e) ! OpenMP requires must be "unallocated upon exit from the region". !$omp end target if (.not. allocated (a)) stop 20 #ifdef MEM_SHARED if (a .ne. 33) stop 21 #else if (a .ne. 11) stop 22 #endif deallocate (a) if (.not. allocated (b)) stop 23 if (b .ne. 25) stop 24 deallocate (b) if (.not. allocated (c)) stop 25 if (c .ne. 10) stop 26 deallocate (c) if (allocated (d)) stop 27 if (allocated (e)) stop 28 end program main