blob: e56bf7952dc9a6fd8d16d00392c95599ba3d3fe2 [file] [log] [blame]
! Copyright 2021 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 3 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/>.
program main
! A non-dynamic type.
type type1
integer(kind=4) :: spacer
integer(kind=4) t1_i
end type type1
! A first dynamic type. The array is of a static type.
type type2
integer(kind=4) :: spacer
type(type1), allocatable :: t2_array(:)
end type type2
! Another dynamic type, the array is again a static type.
type type3
integer(kind=4) :: spacer
type(type1), pointer :: t3_array(:)
end type type3
! A dynamic type, this time the array contains a dynamic type.
type type4
integer(kind=4) :: spacer
type(type2), allocatable :: t4_array(:)
end type type4
! A static type, the array though contains dynamic types.
type type5
integer(kind=4) :: spacer
type(type2) :: t5_array (4)
end type type5
! A static type containing pointers to a type that contains a
! dynamic array.
type type6
type(type2), pointer :: ptr_1
type(type2), pointer :: ptr_2
end type type6
real, dimension(:), pointer :: var1
real, dimension(:), allocatable :: var2
type(type1) :: var3
type(type2), target :: var4
type(type3) :: var5
type(type4) :: var6
type(type5) :: var7
type(type6) :: var8
allocate (var1 (3))
allocate (var2 (4))
allocate (var4%t2_array(3))
allocate (var5%t3_array(3))
allocate (var6%t4_array(3))
allocate (var6%t4_array(1)%t2_array(2))
allocate (var6%t4_array(2)%t2_array(5))
allocate (var6%t4_array(3)%t2_array(4))
allocate (var7%t5_array(1)%t2_array(2))
allocate (var7%t5_array(2)%t2_array(5))
allocate (var7%t5_array(3)%t2_array(4))
allocate (var7%t5_array(4)%t2_array(1))
var8%ptr_1 => var4
var8%ptr_2 => var4
print *, var1 ! Break Here
print *, var2
print *, var3
print *, var4%t2_array(1)
print *, var5%t3_array(2)
print *, var6%t4_array(1)%t2_array(1)
print *, var7%t5_array(1)%t2_array(1)
end program main