http://gcc.gnu.org/bugzilla/show_bug.cgi?id=30162
--- Comment #28 from Thomas Koenig <tkoenig at gcc dot gnu.org> 2012-11-24 12:05:57 UTC --- (In reply to comment #27) > (In reply to comment #26) > > Is this caused by > > > > http://gcc.gnu.org/viewcvs?view=revision&revision=180701 > > > > ? > > > > Maybe we need to remember if we have a special file after all, or just > > ignore > > the error on the truncate. > > IMHO the correct fix is to not seek and/or truncate the file unless the > Fortran > semantics require it; that way libgfortran does not need to care whether the > file is special or not. As explained in #c23, special files are special in > different ways (also different on different OS'es), and trying to enumerate > all > the ways in which they are special is bound to fail. > > I think Tobias comment #c24 pinpoints the place which needs to be fixed, but > unfortunately I haven't had time to look into it. Well, we need to make sure that the (very basic) program program main character*10 x open(10,file="foo.dat") write (10,'(A)') '1111' write (10,'(A)') '2222' close (10) open(10,file="foo.dat") write (10,'(A)') '3333' close (10) open(10,file="foo.dat") 100 continue read (10,'(A)',end=200) x write (*,'(A)') x goto 100 200 continue close(10,status="delete") end continues to work as expected: That probably means truncating on close and rewind. I can see what I can do, but I have little time... (as always)