This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [gfortran] patch for pr14942 -- list directed I/O


 
Second try at fixing this problem.   

thanks to steve kargl for coming up with additional test cases.  

tested i686/gnu/linux FC1.

--bud



! pr 14942, list directed io
      program d
      implicit none
      integer i, j, m, n, nin, k
      real x(3,4)
      data x / 1,1,1,2,2,2,3,3,3,4,4,4 /
      real y(3,4)
      data y / 1,1,1,2,2,2,3,3,3,4,4,4 /
      logical debug ! set me true to see the output
      debug = .FALSE.
      nin = 1
      n = 4
      open(unit = nin)
      write(nin,*) n
      do I = 1,3
        write(nin,*)(x(i,j), j=1, n)
      end do
      m = 3
      n = 4
      write(nin,*) m,n
      do I = 1,3
         write(nin,*)(x(i,j), j=1, n)
      enddo
      close(nin)
! ok, the data file is written
      open(unit = nin)
      read(nin, fmt = *) n
      if (debug ) write(*,'(A,I2)') 'n = ', n
      do i = 1, 3
         do K = 1,n
             x(i,k) = -1
         enddo
         read(nin, fmt = *) (x(i,j), j=1, n)
         if (debug) write(*, *) (x(i,j), j=1, n)
          do K = 1,n
              if (x(i,k).ne.y(i,k)) call abort
          end do
      end do
      m = 0
      n = 0
      read(nin, fmt = *) m, n
      if (debug) write(*,'(A,I2,2X,A,I2)') 'm = ', m, 'n = ', n
      do i = 1, m
         do K = 1,n
             x(i,k) = -1
         enddo
         read(nin, fmt = *) (x(i,j), j=1, n)
         if (debug) write(*, *) (x(i,j), j=1, n)
         do K = 1,n
              if (x(i,k).ne.y(i,k)) call abort
         end do
      end do
      end program d


2004-04-24  Bud Davis  <bdavis9659@comcast.net>

	PR fortran/14942
	* list_read.c(list_formatted_read): finish consuming the 
        spaces and seperators at eoln to get ready for next item.


Index: gcc/libgfortran/io/list_read.c
===================================================================
RCS file: /cvs/gcc/gcc/libgfortran/io/Attic/list_read.c,v
retrieving revision 1.1.2.7
diff -c -3 -p -r1.1.2.7 list_read.c
*** gcc/libgfortran/io/list_read.c      24 Mar 2004 12:14:03 -0000     
1.1.2.7
--- gcc/libgfortran/io/list_read.c      25 Apr 2004 02:02:20 -0000
*************** list_formatted_read (bt type, void *p, i
*** 1243,1249 ****
        {                       /* Found a null value */
          eat_separator ();
          repeat_count = 0;
!         return;
        }
   
      }
--- 1243,1252 ----
        {                       /* Found a null value */
          eat_separator ();
          repeat_count = 0;
!         if (at_eol)
!             finish_separator ();
!           else
!             return;
        }
   
      }
*************** list_formatted_read (bt type, void *p, i
*** 1260,1270 ****
        }
   
        if (at_eol)
!       finish_separator ();
   
        saved_type = BT_NULL;
        repeat_count = 1;
      }
   
    switch (type)
      {
--- 1263,1276 ----
        }
   
        if (at_eol)
!         finish_separator ();
!       else
!         eat_spaces ();
   
        saved_type = BT_NULL;
        repeat_count = 1;
      }
+
   
    switch (type)
      {





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]