| ! Copyright 2015-2020 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, see <http://www.gnu.org/licenses/>. |
| ! |
| ! 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 |