Hi,
I get an error when trying to compile the following code:
module mod1
implicit none
private
save
type, public :: t1
real :: a1 = 0
real :: b1 = 0
end type
type, extends(t1), public :: t2
real :: a2 = 0
real :: b2 = 0
end type
type, extends(t2), public :: t3
real :: a3 = 0
real :: b3 = 0
end type
end module mod1
module mod2
use mod1
implicit none
private
save
real, allocatable :: x(:,:,:)
public setting
public printing
public printing2
contains
!--------------------------------------------------------------------------
subroutine setting()
integer :: i, istat
deallocate (x, STAT = istat)
allocate (x(2,2,2))
x = RESHAPE([(REAL(i), i = 1, SIZE(x))], SHAPE(x))
end subroutine
!--------------------------------------------------------------------------
subroutine printing()
if (.NOT. ALLOCATED(x)) return
!***ifort doesn't like this one:
print *, t3(x(1,1,1), x(2,1,1), x(1,2,1), x(2,2,1), x(1,1,2), x(2,1,2))
end subroutine
!--------------------------------------------------------------------------
subroutine printing2()
real :: a1, b1, a2, b2, a3, b3
if (.NOT. ALLOCATED(x)) return
a1 = x(1,1,1)
b1 = x(2,1,1)
a2 = x(1,2,1)
b2 = x(2,2,1)
a3 = x(1,1,2)
b3 = x(2,1,2)
!***but it likes this one:
print *, t3(a1, b1, a2, b2, a3, b3)
end subroutine
end module
use mod2
implicit none
call setting()
call printing()
call printing2()
endThe printing2() subroutine is equivalent to the printing() subroutine, only using scalars instead of array entries, so commenting line 53 makes the error go away.
It seems to me like yet another structure constructor plus arrays bug ---or am I missing something in regards to single inheritance? Or something else?