! { dg-do run }
! PR fortran/118120 - potential aliasing of complex pointer inquiry references
!
! Contributed by Slava Zakharin < szakharin at nvidia dot com >

program main
  implicit none
  integer :: k
  complex, target :: data(21)
  do k=1,21
     data(k) = cmplx(-k,0.0)
  end do
  call test(1, 1, data)
! print *, data
  if (     data(1)      /= -1.)           stop 1
  if (any (data(2:)% re /= [(k,k=1,20)])) stop 2
  call pr113928 ()
contains
  subroutine test(i, j, data)
    integer :: i, j
    complex, target  :: data(21)
    real, pointer    :: result(:,:,:,:)
    complex, pointer :: temp(:,:)
    result(i:i,j:j,1:4,1:5) => data(2:)%re
    temp(1:4,1:5)           => data(1:20)
    result(i,j,:,:) = abs(temp)
  end subroutine test
end program main

! PR fortran/113928
!
! Contributed by < eddyg_61-bugzilla at yahoo dot it >

subroutine pr113928
  implicit none
  integer, parameter :: N = 4
  complex, target    :: wz(N) = 0.
  real,    pointer   :: wr(:)
  integer :: i

  wr => wz%re
  wr = [(i,i=1,N)]
  wr = wr + wz(N:1:-1)%re
! print *, wr
  if (any (wr /= N+1)) stop 3
end