! Copyright 2015-2016 Free Software Foundation, Inc.
!
! This program is free software; you can redistribute it and/or modify
! it under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 2 of the License, or
! (at your option) any later version.
!
! This program is distributed in the hope that it will be useful,
! but WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
! GNU General Public License for more details.
!
! You should have received a copy of the GNU General Public License
! along with this program; if not, write to the Free Software
! Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
!
! Original file written by Jakub Jelinek <jakub@redhat.com> and
! Jan Kratochvil <jan.kratochvil@redhat.com>.
! Modified for the GDB testcases by Keven Boell <keven.boell@intel.com>.

subroutine foo (array1, array2)
  integer :: array1 (:, :)
  real    :: array2 (:, :, :)

  array1(:,:) = 5                       ! not-filled
  array1(1, 1) = 30

  array2(:,:,:) = 6                     ! array1-filled
  array2(:,:,:) = 3
  array2(1,1,1) = 30
  array2(3,3,3) = 90                    ! array2-almost-filled
end subroutine

subroutine bar (array1, array2)
  integer :: array1 (*)
  integer :: array2 (4:9, 10:*)

  array1(5:10) = 1311
  array1(7) = 1
  array1(100) = 100
  array2(4,10) = array1(7)
  array2(4,100) = array1(7)
  return                                ! end-of-bar
end subroutine

program vla_sub
  interface
    subroutine foo (array1, array2)
      integer :: array1 (:, :)
      real :: array2 (:, :, :)
    end subroutine
  end interface
  interface
    subroutine bar (array1, array2)
      integer :: array1 (*)
      integer :: array2 (4:9, 10:*)
    end subroutine
  end interface

  real, allocatable :: vla1 (:, :, :)
  integer, allocatable :: vla2 (:, :)

  ! used for subroutine
  integer :: sub_arr1(42, 42)
  real    :: sub_arr2(42, 42, 42)
  integer :: sub_arr3(42)

  sub_arr1(:,:) = 1                   ! vla2-deallocated
  sub_arr2(:,:,:) = 2
  sub_arr3(:) = 3

  call foo(sub_arr1, sub_arr2)
  call foo(sub_arr1(5:10, 5:10), sub_arr2(10:15,10:15,10:15))

  allocate (vla1 (10,10,10))
  allocate (vla2 (20,20))
  vla1(:,:,:) = 1311
  vla2(:,:) = 42
  call foo(vla2, vla1)

  call bar(sub_arr3, sub_arr1)
end program vla_sub
