]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorBud Davis <bdavis@gcc.gnu.org>
Wed, 23 Feb 2005 04:09:17 +0000 (04:09 +0000)
committerBud Davis <bdavis@gcc.gnu.org>
Wed, 23 Feb 2005 04:09:17 +0000 (04:09 +0000)
2004-02-22  Paul Thomas <paulthomas2@wannado.fr>
            Bud Davis  <bdavis@gfortran.org>

        * io/list_read.c (read_real): Handle separators properly
        in list directed read.

2005-02-22  Bud Davis  <bdavis@gfortran.org>

        * gfortran.dg/list_read_4.f90: new test.

From-SVN: r95436

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/list_read_4.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/io/list_read.c

index 91b54b0bcba9aa4e8267650b32caa203198b6751..ddaa9ccad8cf30a4afb5077567d62457699044e8 100644 (file)
@@ -1,3 +1,7 @@
+2005-02-22  Bud Davis  <bdavis@gfortran.org>
+
+       * gfortran.dg/list_read_4.f90: new test.
+
 2005-02-22  Kazu Hirata  <kazu@cs.umass.edu>
 
        PR rtl-optimization/20017.
diff --git a/gcc/testsuite/gfortran.dg/list_read_4.f90 b/gcc/testsuite/gfortran.dg/list_read_4.f90
new file mode 100644 (file)
index 0000000..8260ca2
--- /dev/null
@@ -0,0 +1,54 @@
+C { dg-do run }
+C Test of gfortran list directed read> check delimiters are correctly
+C treated.  Written in f77 so that g77 will run for comparison.
+C
+C f , e and i edit reads are terminated separately by read_real.c
+C
+C PThomas                                                   Jan 2005
+C BDavis        
+      program list_read_4
+      integer i(10),l(10),k,j 
+      real x(10),y(10)
+C expected results
+      data y / 1.0,2.0,3.0,-1.0,-1.0,-1.0,4.0,4.0,99.0,99.0 /
+      data l /1,2,3,-1,-1,-1,4,4,99,99/
+C put them in a file
+      open (10,status="scratch")
+      write (10,*) " 1.0, 2.0 , 3.0,, 2* , 2*4.0 , 5*99.0"
+      write (10,*) " 1.0e0, 2.0e0 , 3.0e0,, 2* , 2*4.0e0 , 5*99.0e0"
+      write (10,*) " 1,   2 ,   3,,   2* , 2*4 ,   5*99"
+      write (10,*) " 1,   2 ,   3,,   2* , 2*4 ,   5*99"
+      rewind (10)
+C
+      do k = 1,10
+        x(k) = -1.0
+      enddo
+      read (10,*,iostat=ier) x
+      if (ier.ne.0) call abort
+      do k = 1,10
+         if (x(k).ne.y(k)) call abort
+         x(k) = -1
+      end do
+      READ(10,*,iostat=ier) x
+      if (ier.ne.0) call abort
+      do k = 1,10
+         if (x(k).ne.y(k)) call abort
+         x(k) = -1
+      end do
+      READ(10,*,iostat=ier) x
+      if (ier.ne.0) call abort
+      do k = 1,10
+         if (x(k).ne.y(k)) call abort
+         x(k) = -1
+      end do
+C integer
+      do k = 1,10
+        i(k) = -1
+      end do 
+      READ(10,*,iostat=ier) (i(j),j=1,10)
+      if (ier.ne.0) call abort
+      do k = 1,10
+         if (i(k).ne.y(k)) call abort
+         i(k) = -1
+      end do
+      end
index 39b835d5bc9e668402a7fcc82294ec2fd169c9ea..cdb0868cdb6d440a664732be4c64614be3fb5ffa 100644 (file)
@@ -1,3 +1,9 @@
+2004-02-22  Paul Thomas <paulthomas2@wannado.fr>
+           Bud Davis  <bdavis@gfortran.org>
+
+       * io/list_read.c (read_real): Handle separators properly
+       in list directed read.
+
 2004-02-21  Bud Davis  <bdavis@gfortran.org>
 
        PR fortran/20086
index eecc11491e365c36d59427e9442edf4c7bc7ff70..74a6688b0148c68bcafdf73040efa0aabf43fd6f 100644 (file)
@@ -1052,8 +1052,6 @@ read_real (int length)
          goto got_repeat;
 
        CASE_SEPARATORS:
-          if (c != '\n' &&  c != ',')
-            unget_char (c);    /* Real number that is just a digit-string.  */
          goto done;
 
        default:
@@ -1164,8 +1162,6 @@ read_real (int length)
          break;
 
        CASE_SEPARATORS:
-         unget_char (c);
-         eat_separator ();
          goto done;
 
        default:
@@ -1174,6 +1170,8 @@ read_real (int length)
     }
 
  done:
+  unget_char (c);
+  eat_separator ();
   push_char ('\0');
   if (convert_real (value, saved_string, length))
     return;