https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70684

            Bug ID: 70684
           Summary: incorrect reading of values from file on Windows
           Product: gcc
           Version: 5.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libfortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ajmay81 at googlemail dot com
  Target Milestone: ---

When writing and then reading back values from a file on Windows (program built
with gfortran via mxe cross compiler) the wrong values are read. Here is a
trivial example:

program test
implicit none
integer,parameter :: isize=12
integer,parameter :: funit=12
integer :: i
double precision, dimension(isize) :: a
do i=1,isize
 a(i)=dble(i)
enddo

write(6,*)'Value to write'
do i=1,isize
 write(6,*)a(i)
enddo

open(funit,file='test.txt')
write(funit,'(1x,6(f25.20,'',''))') (a(i),i=1,isize)
close(funit)

do i=1,isize
 a(i)=0d0
enddo

open(funit,file='test.txt')
read(funit,*) (a(i),i=1,isize)
close(funit)

write(6,*)'Values after read'
do i=1,isize
 write(6,*)a(i)
enddo

end

And compiled with:

x86_64-w64-mingw32.static-gfortran test.f90

On Linux the values 1-12 are read, but on Windows the values 1-6,0,7-11 are
read. It seems that the file is written with Windows line endings on Windows,
but when read Linux line endings are expected. I think it should be consistent,
at least one should be able to read files back on the same system they are
generated.

I grepped through a recent 5.3.0 tarball, and it's a bit of a guess but in
libgfortran/io/transfer.c the function next_record_r() knows only about '\n'
line endings, yet it's opposite number next_record_w() knows about both '\n'
and '\r' - so perhaps the same logic just needs copying to the read function?

Reply via email to