Hi,
I'm sorry for this unspecific subject but it's hard to find a title for this problem. I have the following minimal example:
File: base.f90
module m_type implicit none type mytype real(kind=8) :: array(6) end type mytype type (mytype) :: te data te%array /1.d0, 1.d0, 1.d0, 0.d0, 0.d0, 0.d0/ contains subroutine output_0(number, name) implicit none real(kind=8) :: number character(*) :: name write(*,*) name, number end subroutine output_0 subroutine output_1(typ, name) implicit none type(mytype) :: typ character(*) :: name write(*,*) name, typ%array end subroutine output_1 end module m_type
File: main.f90
program test use m_type implicit none integer, parameter :: steps = 10, periods = 10 integer :: i1 type(mytype) :: t(steps*periods) do i1 = 1, steps*periods t(i1) = te enddo call output_0(t(2)%array(1), "t2(1) = ") call output_1(te, "te = ") ! call output_1(t(2), "t(2) = ") ! write(*,*) t(steps)%array(1) end program test
I would expect the following output:
t2(1) = 1.00000000000000 te = 1.00000000000000 1.00000000000000 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000 0.000000000000000E+000
Instead, I get the following:
ifort --version ifort (IFORT) 13.0.0 20120731 Copyright (C) 1985-2012 Intel Corporation. All rights reserved. ifort base.f90 main.f90 -o Test ./Test t2(1) = 0.000000000000000E+000 te = 1.00000000000000 1.00000000000000 1.00000000000000 0.000000000000000E+000 0.000000000000000E+000 0.000000000000000E+000
This does not occur in the following cases:
- -debug full
- uncomment one of the two last lines in main.f90
- use a single file for the code
- only use "steps" as an upper boundary in the do-loop
Is there something wrong with the data-statement in module m_type (by the way, is there a way to define a type as a parameter?)? Or is this a compiler bug? gfortran works as expected, even if I use optimization.
Thank you!