1! Program to test derived type initializers and constructors
2program der_init
3   implicit none
4   type t
5      integer :: i
6      integer :: j = 4
7   end type
8   integer :: m, n
9
10   ! Explicit initializer
11   type (t) :: var = t(1, 2)
12   ! Type (default) initializer
13   type (t) :: var2
14   ! Initialization of arrays
15   type (t), dimension(2) :: var3
16   type (t), dimension(2) :: var4 = (/t(7, 9), t(8, 6)/)
17
18   if (var%i .ne. 1 .or. var%j .ne. 2) STOP 1
19   if (var2%j .ne. 4) STOP 2
20   var2 = t(6, 5)
21   if (var2%i .ne. 6 .or. var2%j .ne. 5) STOP 3
22
23   if ((var3(1)%j .ne. 4) .or. (var3(2)%j .ne. 4)) STOP 4
24   if ((var4(1)%i .ne. 7) .or. (var4(2)%i .ne. 8) &
25       .or. (var4(1)%j .ne. 9) .or. (var4(2)%j .ne. 6)) STOP 5
26
27   ! Non-constant constructor
28   n = 1
29   m = 5
30   var2 = t(n, n + m)
31   if (var2%i .ne. 1 .or. var2%j .ne. 6) STOP 6
32end program
33