------- Additional Comments From dje at gcc dot gnu dot org 2005-04-26 18:33 ------- The problem is due to libgfortran not flushing the record length marker to the file. transfer.c:next_record_w() copies the record length into the buffer, but does not ensure that the buffer gets flushed to the file. At a later point, libgfortran seeks past the file position and then back, which the UNIX standard allows the OS to fill with zeroes. next_record_w() calls sfree(), but sfree() specifically does not flush the buffer if operating on the small_buffer in the unix_stream structure or the stream is buffered. Presumably when switching from writing to reading, the buffer should be flushed.
The call to REWIND sets the mode to reading and truncates the file before the call to flush in data_transfer_init() could occur. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20930