! { dg-do run }
!
! PR fortran/85868
!
! Contributed by Harald Anlauf <anlauf@gmx.de>
! 

program test
  
  implicit none
  
  integer, parameter :: e(*) = [1, 1, -1, -1, 0, 0, 1]
  
  integer, pointer :: t(:), u(:)
  integer          :: i
  
  allocate (t(-1:5))
  do i = -1, 5
    t(i) = i
  end do
  call p (t, e(1))     ! Pointer with lower bound = -1 from allocation
  u     => t           ! Pointer assignment sets same lower bound
  call p (u, e(2))
  !
  u     => t(:)        ! Pointer assignment with implicit lower bound (1)
  call p (u, e(3))
  call p (t(:), e(4))  ! Full array, behaves the same
  !
  call p (t(0:), e(5)) ! Array section
  u     => t(0:)       ! Pointer assignment with implicit lower bound (1)
  call p (u, e(6))
  u(0:) => t(0:)       ! Pointer assignment with given lower bound (0)
  call p (u, e(7))
  stop
  
contains
  
  subroutine p (a, v)
    integer, pointer, intent(in) :: a(:)
    integer,          intent(in) :: v
    
    if(a(1)/=v) stop 1001
    return
  end subroutine p
  
end program test