https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121759
Bug ID: 121759 Summary: Windows/MinGW: formatted reads lose decimal digits after binary stream read Product: gcc Version: 15.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: francois.depicciotto at gmail dot com Target Milestone: --- Created attachment 62267 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=62267&action=edit Code to reproduce There is a reproducible but non-deterministic bug in libgfortran under Windows (MinGW/MinGW-w64): after performing a binary read (or write) from a file, subsequent formatted reads (FORM='FORMATTED') from text files sometimes lose the decimal part of floating-point numbers. This issue does not occur under Linux with the same gfortran version. How to reproduce **************** Create two files in the working directory: toto.txt containing exactly: 123.456 toto.bin containing at least 8 zero bytes (dummy binary file) Program (minimal reproducer): program toto call readtxt call readtxt call readbin call readtxt call readtxt end program subroutine readtxt real :: t integer :: kf, IPB t = 0.0 open(newunit=kf, file="toto.txt", form="FORMATTED", & status="OLD", action="READ", iostat=IPB) if (IPB == 0) then read(kf, *) t print *, "t=", t endif close(kf) end subroutine subroutine readbin integer :: io, IPB real*8 :: x open(newunit=io, file="toto.bin", access="STREAM", & form="UNFORMATTED", status="OLD", iostat=IPB) read(io) x close(io) end subroutine Another code to reproduce is attached (that creates the txt itself, and with slightly more tests). Observed behavior ***************** The first two calls to readtxt always read and display the correct value (123.456). After the binary read (readbin), the next calls to readtxt *sometimes* still read correctly, but randomly lose the decimal part and print 123.000000. *This happens non-deterministically: multiple executions of the same binary produce different outcomes ; sometimes 123.456, sometimes 123.000.* Example (Windows 11, gfortran 15.2.0, MinGW-w64 13.0.0): t= 123.456001 t= 123.456001 t= 123.000000 t= 123.000000 On Linux with the same compiler version, the issue does not reproduce: the value is always read correctly. Expected behavior ***************** Formatted reads from a text file should always return the correct floating-point value, regardless of whether a binary read or wirte was performed earlier. Notes ***** Adding DECIMAL='POINT' to the OPEN statement does not fix the issue. Using explicit formats (e.g. read(kf,'(F15.8)') t) also does not fix it. Performing only the OPEN/CLOSE of the binary file without an actual READ avoids triggering the bug. Reported by multiple users in Fortran-lang: https://fortran-lang.discourse.group/t/problem-after-reading-binary-file-with-windows-gfortran/7407