From e3f365343fa1c2a9469fdd9526b171eeab0c1752 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Tue, 24 May 2016 06:11:21 +0000 Subject: [PATCH] re PR libfortran/70684 (incorrect reading of values from file on Windows) 2016-05-23 Jerry DeLisle PR libgfortran/70684 * io/list_read (eat_spaces): Eat '\r' as part of spaces. * gfortran.dg/namelist_90.f: New test From-SVN: r236628 --- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/namelist_90.f | 28 +++++++++++++++++++++++++ libgfortran/ChangeLog | 6 +++++- libgfortran/io/list_read.c | 2 +- 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/namelist_90.f diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 49789988c96..32e95227be2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-05-23 Jerry DeLisle + + PR fortran/71123 + * gfortran.dg/namelist_90.f: New test + 2016-05-23 Jerry DeLisle PR fortran/66461 diff --git a/gcc/testsuite/gfortran.dg/namelist_90.f b/gcc/testsuite/gfortran.dg/namelist_90.f new file mode 100644 index 00000000000..9c0ae5b72bb --- /dev/null +++ b/gcc/testsuite/gfortran.dg/namelist_90.f @@ -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 diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 6d16d644cd5..549a5aa2a2e 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,8 +1,12 @@ +2016-05-23 Jerry DeLisle + + PR libgfortran/70684 + * io/list_read (eat_spaces): Eat '\r' as part of spaces. + 2016-04-19 Jerry DeLisle PR libgfortran/70684 * io/list_read (check_buffers): Add '\r' to check for end of line. - factor. 2016-03-30 Jerry DeLisle Dominique d'Humieres diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index b8e174c5bd7..244430d9765 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -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; -- 2.30.2