"Fortran runtime error: End of file" while writing

1k views Asked by At

I have written a piece of code, compiled with GNU Fortran (GCC) 7.2.1 20171128 on Arch Linux, that tries to write to a file. The unit is opened with the newunit=... Fortran 2008-feature

When trying to write to the file, the code crashes, raising the error Fortran runtime error: End of file.

Non working code

Here's a minimal non-working version of the code. If the file does not exist, the code crashes with gfortran 7.2.1

program foo
  implicit none

  character(len=80) :: filename
  character(len=5) :: nchar

  integer :: ilun=1

  call title(1, nchar)
  ! nchar = '00001'

  filename = trim(nchar)//'.txt'

  write(*, '(a, "<", a, ">")') 'filename ', trim(filename)
  open(newunit=ilun, file=trim(filename), form='formatted', status='replace')
  write(ilun, '(a1,a12,a10)') '#', 'Family', 'Count'
  close(ilun)
end program foo

subroutine title(n, nchar)
  implicit none
  integer, intent(in) :: n
  character(len=5), intent(out) :: nchar
  write(nchar, '(i0.5)') n

end subroutine title

Here the command I'm using rm -f 00001.txt; gfortran foo.f90 -o a.out && ./a.out.

Working code

By comparison, the following code compiles and works perfectly on the same machine

program foo

 implicit none

  character(len=80) :: filename
  character(len=5) :: nchar

  integer :: ilun=1

  ! call title(1, nchar)
  nchar = '00001'

  filename = trim(nchar)//'.txt'

  write(*, '(a, "<", a, ">")') 'filename ', trim(filename)
  open(newunit=ilun, file=trim(filename), form='formatted', status='replace')
  write(ilun, '(a1,a12,a10)') '#', 'Family', 'Count'
  close(ilun)
end program foo

Here's the command I'm using rm -f 00001.txt; gfortran foo.f90 -o a.out && ./a.out.

Important note

Both codes work well when compiled using ifort (any version tried between ifort15 and ifort18) as well as GNU Fortran (GCC) 6.4.1 20171003 and GNU Fortran (GCC) 7.2.0, so there seems to be an issue introduced in version 7.2.1 of gfortran or on the version bundled with Arch Linux.

A few comments

  • If you uncomment nchar = '00001' in the non-working example, it still doesn't work.
  • If you change newunit=ilun to unit=ilun, with e.g. ilun=10 before, it works in any case

System details

OS: GNU Linux Distribution: Arch Linux (up-to-date as of 15-12-2017)

$ uname -a
Linux manchot 4.14.4-1-ARCH #1 SMP PREEMPT Tue Dec 5 19:10:06 UTC 2017 x86_64 GNU/Linux
$ gfortran --version
GNU Fortran (GCC) 7.2.1 20171128
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1

There are 1 answers

0
cphyc On

This issue is related to the Arch Linux distribution of Gfortran 7.2.1. It has now been fixed (see https://bugs.archlinux.org/task/56768).

If you encounter the issue, you should update your installation using

pacman -Syu gcc-fortran