From 5f54710465b16155cffaa7934e29533cd2d21292 Mon Sep 17 00:00:00 2001 From: Janne Blomqvist Date: Wed, 13 Jul 2011 21:46:44 +0300 Subject: [PATCH] PR 49296 List read, EOF without preceding separator 2011-07-13 Janne Blomqvist PR libfortran/49296 * io/list_read.c (read_logical): Don't error out if a valid value is followed by EOF instead of a normal separator. (read_integer): Likewise. testsuite: 2011-07-13 Janne Blomqvist PR libfortran/49296 * gfortran.dg/read_list_eof_1.f90: Add tests for integer, real, and logical reads. From-SVN: r176245 --- gcc/testsuite/ChangeLog | 6 +++ gcc/testsuite/gfortran.dg/read_list_eof_1.f90 | 38 +++++++++++++++++-- libgfortran/ChangeLog | 7 ++++ libgfortran/io/list_read.c | 12 +++--- 4 files changed, 54 insertions(+), 9 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d4743a620aa..f6fd7f0ebb1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-07-13 Janne Blomqvist + + PR libfortran/49296 + * gfortran.dg/read_list_eof_1.f90: Add tests for integer, real, + and logical reads. + 2011-07-13 Rainer Orth * gcc.c-torture/execute/990127-2.x: Use -mpc64 on i?86-*-darwin*, diff --git a/gcc/testsuite/gfortran.dg/read_list_eof_1.f90 b/gcc/testsuite/gfortran.dg/read_list_eof_1.f90 index 775346e4a75..c33bc2e092e 100644 --- a/gcc/testsuite/gfortran.dg/read_list_eof_1.f90 +++ b/gcc/testsuite/gfortran.dg/read_list_eof_1.f90 @@ -3,7 +3,11 @@ program read_list_eof_1 implicit none character(len=100) :: s - call genfil () + integer :: ii + real :: rr + logical :: ll + + call genfil ('a') open (unit=20, file='read.dat', form='FORMATTED', action='READ', & status='OLD') read (20, fmt=*) s @@ -12,11 +16,39 @@ program read_list_eof_1 call abort () end if + call genfil ('1') + open (unit=20, file='read.dat', form='FORMATTED', action='READ', & + status='OLD') + read (20, fmt=*) ii + close (20, status='delete') + if (ii /= 1) then + call abort () + end if + + call genfil ('1.5') + open (unit=20, file='read.dat', form='FORMATTED', action='READ', & + status='OLD') + read (20, fmt=*) rr + close (20, status='delete') + if (rr /= 1.5) then + call abort () + end if + + call genfil ('T') + open (unit=20, file='read.dat', form='FORMATTED', action='READ', & + status='OLD') + read (20, fmt=*) ll + close (20, status='delete') + if (.not. ll) then + call abort () + end if + contains - subroutine genfil + subroutine genfil(str) + character(len=*), intent(in) :: str open(10, file='read.dat', form='unformatted', action='write', & status='replace', access='stream') - write(10) 'a' + write(10) str close(10) end subroutine genfil end program read_list_eof_1 diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 0bf20db904b..b66f300aca1 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,10 @@ +2011-07-13 Janne Blomqvist + + PR libfortran/49296 + * io/list_read.c (read_logical): Don't error out if a valid value + is followed by EOF instead of a normal separator. + (read_integer): Likewise. + 2011-07-09 Tobias Burnus * runtime/error.c (sys_abort): Change argument list diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index baf2f54041a..c88f23293a3 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -657,22 +657,20 @@ read_logical (st_parameter_dt *dtp, int length) { case 't': v = 1; - if ((c = next_char (dtp)) == EOF) - goto bad_logical; + c = next_char (dtp); l_push_char (dtp, c); - if (!is_separator(c)) + if (!is_separator(c) && c != EOF) goto possible_name; unget_char (dtp, c); break; case 'f': v = 0; - if ((c = next_char (dtp)) == EOF) - goto bad_logical; + c = next_char (dtp); l_push_char (dtp, c); - if (!is_separator(c)) + if (!is_separator(c) && c != EOF) goto possible_name; unget_char (dtp, c); @@ -837,6 +835,7 @@ read_integer (st_parameter_dt *dtp, int length) goto repeat; CASE_SEPARATORS: /* Not a repeat count. */ + case EOF: goto done; default: @@ -886,6 +885,7 @@ read_integer (st_parameter_dt *dtp, int length) break; CASE_SEPARATORS: + case EOF: goto done; default: -- 2.30.2