1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
! Copyright 2015-2017 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
|