|  | ! 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 |