http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59700

--- Comment #6 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
On Thu, Jan 09, 2014 at 09:27:18AM +0000, dominiq at lps dot ens.fr wrote:
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59700
> 
> --- Comment #4 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
> > Created attachment 31760 [details]
> > list_io.diff
> >
> > The attached patch fixes the code in comment #1.  I'm currently
> > doing the regtest.
> 
> The patch fixes the problem (at least integer and real) without regression.
> I don't know how to test that it does not reintroduce memory leak (though I
> doubt it will).
> 
> Would it help if I write a test case and do the packaging?
> 

I've started to write a testcase, but the counting of items is
still wrong.  Look for the XXX comment in the following code.
I can't find where the item count is incremented in this particular
situation.  Probably need Jan or Jerry to look at this code.

! { dg-do run }
program foo

   implicit none

   character(len=80) msg
   integer, parameter :: fd = 10
   integer i1, i2, i3, i4
   real    x1, x2, x3, x4
   complex c1, c2
   logical a

   open(unit=fd, status='scratch')
   write(fd, '(A)') '1 2 3.4 q'

   rewind(fd)
   msg = 'ok'
   read(fd, *, err=10, iomsg=msg) i1, i2, i3, i4
10 if (msg /= 'Bad integer for item 3 in list input') call abort

   rewind(fd)
   msg = 'ok'
   read(fd, *, err=20, iomsg=msg) x1, x2, x3, x4
20 if (msg /= 'Bad real number in item 4 of list input') call abort

   rewind(fd)
   msg = 'ok'
! XXX The following line gives 'Bad logical value while reading item 5',
! XXX so the item count is off by one.
   read(fd, *, err=30, iomsg=msg) i1, x2, x1, a
30 if (msg /= 'Bad logical value while reading item 4') call abort

   read(fd, *, err=31, iomsg=msg) i1, x2, a, x1
31 if (msg /= 'Bad repeat count in item 3 of list input') call abort
   close(fd)

   open(unit=fd, status='scratch')
   write(fd, '(A)') '(1, 2) (3.4, q)'

   rewind(fd)
   msg = 'ok'
   read(fd, *, err=40, iomsg=msg) c1, c2
40 if (msg /= 'Bad floating point number for item 2') call abort

   close(fd)

end program foo

Reply via email to