The following test case reads past the end of record because sf_read is being
executed before the check for length is performed. Discovered during testing
of arrayio. See message: http://gcc.gnu.org/ml/fortran/2005-10/msg00382.html
The following simplified test case shows the problem without using my arrayio
patches not yet committed.
program read_block
character*4, dimension(8) :: abuf = (/"0123","4567","89AB","CDEF", &
"0123","4567","89AB","CDEF"/)
character*4, dimension(2,4) :: buf
character*8 :: a
equivalence (buf,abuf)
read(buf, '(a8)') a
print *, a
end program read_block
gfortran gives:
$ ./a.out
01234567
ifort gives:
$ ./a.out
0123
--
Summary: read_block wrong execution order
Product: gcc
Version: 4.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: libfortran
AssignedTo: jvdelisle at gcc dot gnu dot org
ReportedBy: jvdelisle at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24489