(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-fortran/
pr106643-1.f90
! { dg-do run }
! { dg-additional-options -cpp }


!TODO OpenACC 'serial' vs. GCC/nvptx:
!TODO { dg-prune-output {using 'vector_length \(32\)', ignoring 1} }


module m_macron

    implicit none

    real(kind(0d0)), allocatable, dimension(:) :: valls
    !$acc declare create(valls)

contains

    subroutine s_macron_compute(size)

        integer :: size

        !$acc routine seq

#if ACC_MEM_SHARED
        if (valls(size) /= 1) error stop
#else
        if (valls(size) /= size - 2) error stop
#endif

        valls(size) = size + 2

    end subroutine s_macron_compute

    subroutine s_macron_init(size)

        integer :: size

        print*, "size=", size

        print*, "allocate(valls(1:size))"
        allocate(valls(1:size))

        print*, "acc enter data create(valls(1:size))"
        !$acc enter data create(valls(1:size))

        print*, "!$acc update device(valls(1:size))"
        valls(size) = size - 2
        !$acc update device(valls(1:size))

        valls(size) = 1

        !$acc serial
        call s_macron_compute(size)
        !$acc end serial

        valls(size) = -1

        !$acc update host(valls(1:size))
#if ACC_MEM_SHARED
        if (valls(size) /= -1) error stop
#else
        if (valls(size) /= size + 2) error stop
#endif

        print*, valls(1:size)

        print*, "acc exit data delete(valls)"
        !$acc exit data delete(valls)

    end subroutine s_macron_init

end module m_macron


program p_main

    use m_macron

    implicit none

    call s_macron_init(10)

end program p_main