+2019-11-26 Jerry DeLisle <jvdelisle@gcc.ngu.org>
+
+ Backport from trunk
+ PR fortran/92100
+ gfortran.dg/streamio_18.f90: New test.
+
2019-11-25 Thomas Koenig <tkoenig@gcc.gnu.org>
Harald Anlauf <anlauf@gmx.de>
--- /dev/null
+! { dg-do run }
+! PR91200
+program foo
+ implicit none
+ integer fd
+ open(newunit=fd, file='test.dat', access='stream', form='formatted')
+ write(fd,'(A)') '$MeshFormat'
+ write(fd,'(A)') 'aabbccdd'
+ close(fd)
+ call readfile ! Read test.dat
+contains
+ subroutine readfile
+ character(len=20) buf1, buf2
+ integer fd, m, n
+ open(newunit=fd, file='test.dat', access='stream', form='formatted')
+ inquire(fd, pos=m)
+ if (m /= 1) stop 'm /= 1'
+ read(fd, *) buf1
+ read(fd, *, pos=m) buf2 ! Reread by using pos=1
+ close(fd, status='delete')
+ if (buf1 /= buf2) stop 'wrong'
+ end subroutine readfile
+end program
+2019-11-26 Jerry DeLisle <jvdelisle@gcc.ngu.org>
+
+ Backport from mainline
+ PR fortran/92100
+ io/transfer.c (data_transfer_init_worker): Use fbuf_reset
+ instead of fbuf_flush before the seek. Note that fbuf_reset
+ calls fbuf_flush and adjusts fbuf pointers.
+
2019-11-25 Thomas Koenig <tkoenig@gcc.gnu.org>
Harald Anlauf <anlauf@gmx.de>
if (dtp->pos != dtp->u.p.current_unit->strm_pos)
{
- fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
- if (sseek (dtp->u.p.current_unit->s, dtp->pos - 1, SEEK_SET) < 0)
+ fbuf_reset (dtp->u.p.current_unit);
+ if (sseek (dtp->u.p.current_unit->s, dtp->pos - 1,
+ SEEK_SET) < 0)
{
generate_error (&dtp->common, LIBERROR_OS, NULL);
return;