PR 49296 List read, EOF without preceding separator
authorJanne Blomqvist <jb@gcc.gnu.org>
Wed, 13 Jul 2011 18:46:44 +0000 (21:46 +0300)
committerJanne Blomqvist <jb@gcc.gnu.org>
Wed, 13 Jul 2011 18:46:44 +0000 (21:46 +0300)
2011-07-13  Janne Blomqvist  <jb@gcc.gnu.org>

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  <jb@gcc.gnu.org>

PR libfortran/49296
* gfortran.dg/read_list_eof_1.f90: Add tests for integer, real,
and logical reads.

From-SVN: r176245

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/read_list_eof_1.f90
libgfortran/ChangeLog
libgfortran/io/list_read.c

index d4743a620aa1aa847c84fab701be58af05bdda64..f6fd7f0ebb11c6a034f48126807751e0532cba8f 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-13  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       PR libfortran/49296
+       * gfortran.dg/read_list_eof_1.f90: Add tests for integer, real,
+       and logical reads.
+
 2011-07-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * gcc.c-torture/execute/990127-2.x: Use -mpc64 on i?86-*-darwin*,
index 775346e4a758863e0f541117bfab6099d2d50deb..c33bc2e092e308c8e92579440787b651cbe005c7 100644 (file)
@@ -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
index 0bf20db904b25278f4c60c92dd440b784bda09af..b66f300aca1da77c7e7041a81ab6041c005f00d3 100644 (file)
@@ -1,3 +1,10 @@
+2011-07-13  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       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  <burnus@net-b.de>
 
        * runtime/error.c (sys_abort): Change argument list
index baf2f54041a7b5b23eeba8fd5b9c63d61bbd1bd2..c88f23293a33770109551f5698d11b7e3d4c2b2f 100644 (file)
@@ -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: