! { dg-do run }
!
! Test the fix for PR82375. This is the allocatable version of pdt_13.f03.
!
! Based on contribution by Ian Chivers  <ian@rhymneyconsulting.co.uk>
!
module precision_module
  implicit none
  integer, parameter :: sp = selected_real_kind(6, 37)
  integer, parameter :: dp = selected_real_kind(15, 307)
  integer, parameter :: qp = selected_real_kind( 30, 291)
end module precision_module

module link_module
  use precision_module

  type link(real_kind)
    integer, kind :: real_kind
    real (kind=real_kind) :: n
    type (link(real_kind)), allocatable :: next
  end type link

contains

  function push_8 (self, arg) result(current)
    real(dp) :: arg
    type (link(real_kind=dp)), allocatable, target :: self
    type (link(real_kind=dp)), pointer :: current

    if (allocated (self)) then
      current => self
      do while (allocated (current%next))
        current => current%next
      end do

      allocate (current%next)
      current => current%next
    else
      allocate (self)
      current => self
    end if

    current%n = arg

  end function push_8

  function pop_8 (self) result(res)
    type (link(real_kind=dp)), allocatable, target :: self
    type (link(real_kind=dp)), pointer:: current
    type (link(real_kind=dp)), pointer :: previous
    real(dp) :: res

    res = 0.0_8
    if (allocated (self)) then
      current => self
      previous => self
      do while (allocated (current%next))
         previous => current
         current => current%next
      end do
      res = current%n
      if (.not.allocated (previous%next)) then
        deallocate (self)
      else
        deallocate (previous%next)
      end if

    end if
  end function pop_8

end module link_module

program ch2701
  use precision_module
  use link_module
  implicit none
  integer, parameter :: wp = dp
  type (link(real_kind=wp)), allocatable :: root
  type (link(real_kind=wp)), pointer :: current

  current => push_8 (root, 1.0_8)
  current => push_8 (root, 2.0_8)
  current => push_8 (root, 3.0_8)

  if (int (pop_8 (root)) .ne. 3) STOP 1
  if (int (pop_8 (root)) .ne. 2) STOP 2
  if (int (pop_8 (root)) .ne. 1) STOP 3
  if (int (pop_8 (root)) .ne. 0) STOP 4

end program ch2701
