[Bug fortran/59700] [4.8/4.9 Regression] Misleading/buggy runtime error message: Bad integer for item 0 in list input
sgk at troutmask dot apl.washington.edu
gcc-bugzilla@gcc.gnu.org
Thu Jan 9 15:44:00 GMT 2014
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
More information about the Gcc-bugs
mailing list