re PR libfortran/70684 (incorrect reading of values from file on Windows)

2016-05-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/70684
	* io/list_read (eat_spaces): Eat '\r' as part of spaces.

	* gfortran.dg/namelist_90.f: New test

From-SVN: r236628
This commit is contained in:
Jerry DeLisle 2016-05-24 06:11:21 +00:00
parent 85d5c27d78
commit e3f365343f
4 changed files with 39 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2016-05-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/71123
* gfortran.dg/namelist_90.f: New test
2016-05-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/66461

View File

@ -0,0 +1,28 @@
! { dg-do run }
! PR71123 Namelist read failure on Windows
implicit none
integer :: i, ierr
real(8), dimension(30) :: senid, res
character(2) :: crlf = char(13) // char(10)
namelist /fith/ senid
do i=1,30
res(i) = i
enddo
senid = 99.0
open(unit=7,file='test.out',form='formatted',
* status='new',action='readwrite', access='stream')
write(7,'(a)') "&fith" // crlf
write(7,'(a)') "senid= 1.0 , 2.0 , 3.0 , 4.0 , 5.0 ," // crlf
write(7,'(a)') "6.0 , 7.0 , 8.0 , 9.0 , 10.0 , 11.0 ," // crlf
write(7,'(a)') "12.0 , 13.0 , 14.0 , 15.0 , 16.0 , 17.0 ," // crlf
write(7,'(a)') "18.0 , 19.0 , 20.0 , 21.0 , 22.0 , 23.0 ," // crlf
write(7,'(a)') "24.0 , 25.0 , 26.0 , 27.0 , 28.0 , 29.0 ," // crlf
write(7,'(a)') "30.0 ," // crlf
write(7,'(a)') "/" // crlf
close(7)
open(unit=7,file='test.out',form='formatted')
read(7,nml=fith, iostat=ierr)
close(7, status="delete")
if (ierr.ne.0) call abort
if (any(senid.ne.res)) call abort
end

View File

@ -1,8 +1,12 @@
2016-05-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/70684
* io/list_read (eat_spaces): Eat '\r' as part of spaces.
2016-04-19 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/70684
* io/list_read (check_buffers): Add '\r' to check for end of line.
factor.
2016-03-30 Jerry DeLisle <jvdelisle@gcc.gnu.org>
Dominique d'Humieres <dominiq@lps.ens.fr>

View File

@ -418,7 +418,7 @@ eat_spaces (st_parameter_dt *dtp)
/* Now skip spaces, EOF and EOL are handled in next_char. */
do
c = next_char (dtp);
while (c != EOF && (c == ' ' || c == '\t'));
while (c != EOF && (c == ' ' || c == '\r' || c == '\t'));
unget_char (dtp, c);
return c;