1*37234499Sagozillon! Offloading test checking interaction of an enter and exit map of an array of 2*37234499Sagozillon! scalars with specified bounds 388234488SEthan Luis McDonough! REQUIRES: flang, amdgpu 4330d8983SJohannes Doerfert 5330d8983SJohannes Doerfert! RUN: %libomptarget-compile-fortran-run-and-check-generic 6330d8983SJohannes Doerfert 7330d8983SJohannes Doerfertprogram main 8330d8983SJohannes Doerfert integer :: array(10) 9330d8983SJohannes Doerfert 10330d8983SJohannes Doerfert do I = 1, 10 11330d8983SJohannes Doerfert array(I) = I + I 12330d8983SJohannes Doerfert end do 13330d8983SJohannes Doerfert 14330d8983SJohannes Doerfert !$omp target enter data map(to: array(3:6)) 15330d8983SJohannes Doerfert ! Shouldn't overwrite data already locked in 16330d8983SJohannes Doerfert ! on target via enter, which will then be 17330d8983SJohannes Doerfert ! overwritten by our exit 18330d8983SJohannes Doerfert do I = 1, 10 19330d8983SJohannes Doerfert array(I) = 10 20330d8983SJohannes Doerfert end do 21330d8983SJohannes Doerfert 22330d8983SJohannes Doerfert ! The compiler/runtime is less lenient about read/write out of 23330d8983SJohannes Doerfert ! bounds when using enter and exit, we have to specifically loop 24330d8983SJohannes Doerfert ! over the correctly mapped range 25330d8983SJohannes Doerfert !$omp target 26330d8983SJohannes Doerfert do i=3,6 27330d8983SJohannes Doerfert array(i) = array(i) + i 28330d8983SJohannes Doerfert end do 29330d8983SJohannes Doerfert !$omp end target 30330d8983SJohannes Doerfert 31330d8983SJohannes Doerfert !$omp target exit data map(from: array(3:6)) 32330d8983SJohannes Doerfert print *, array 33330d8983SJohannes Doerfertend program 34330d8983SJohannes Doerfert 35330d8983SJohannes Doerfert!CHECK: 10 10 9 12 15 18 10 10 10 10 36