------- Comment #24 from burnus at gcc dot gnu dot org 2007-06-22 13:26 ------- Additional note - as pointed out by Ian of NAG: program main implicit none integer :: jt, it(100) real :: tt equivalence (jt,tt) do i=1,100 tt=i it(i)=jt end do end program main
Here "jt" is *undefined*. The Fortran 2003 standard has in Section 16.5.6: "When a variable of a given type becomes defined, all associated variables of different type become undefined." (There is an exception for real vs. complex variables.) That mean "jt" can contain any value according to the standard (cf. "union" in C). In reality, after assigning real(ii) to tt, jt has a defined value - which some programs make use of. Fortran 2003 standard conform would be not: "it(i) = jt", but "it(i)=transfer(tt,0)", which gives however the same result in practice. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32393