$ cat direct_io_2.f90 OPEN (7, ACCESS = 'DIRECT', RECL = 50) IRECN = 0 IREC = 216 DO I=1,100 IREC = IREC - 2 IRECN = IRECN + 1 WRITE(7, REC = IREC) IRECN END DO IRECCK = 0 IREC = 216 DO I = 1,100 IREC = IREC - 2 IRECCK = IRECCK + 1 READ(7, REC = IREC) IRECN IF (IRECN .NE. IRECCK) CALL ABORT END DO END $ gfc direct_io_2.f90 && ./a.exe Abort
The file fort.7 is indeed wrong: $ xxd -s 9745 fort.7 |head -n 1 0002611: 0000 0000 000d 0a00 0000 0000 0000 0000 ................ $ xxd -s 9745 linux.fort.7 |head -n 1 0002611: 0000 0000 000a 0000 0000 0000 0000 0000 ................ where linux.fort.7 is obtained by running the same program with a linux gfortran (for which the testcase passes). The problem is very sensitive to the number of records writtent and the record length (it disappears if they are too little). -- Summary: direct access failure Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: libfortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: fxcoudert at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org GCC host triplet: i386-mingw32 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23264