re PR libfortran/17597 (list directed read has error)

2004-12-15  Bud Davis  <bdavis9659@comcast.net>
            Steven G. Kargl  <kargls@comcast.net>

        PR fortran/17597
        * io/list_read.c (read_real): do not push back a comma when
        it delimits a real value without a decimal point


2004-12-15  Bud Davis  <bdavis9659@comcast.net>
            Steven G. Kargle  <kargls@comcast.net>

        PR fortran/17597
        * gfortran.dg/list_read_3.f90: New test.

Co-Authored-By: Steven G. Kargl <kargls@comcast.net>
Co-Authored-By: Steven G. Kargl <kargls@comcast.net>

From-SVN: r92190
This commit is contained in:
Bud Davis 2004-12-15 12:42:39 +00:00 committed by Bud Davis
parent 0aec601466
commit c8c83c1828
4 changed files with 115 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2004-12-15 Bud Davis <bdavis9659@comcast.net>
Steven G. Kargle <kargls@comcast.net>
PR fortran/17597
* gfortran.dg/list_read_3.f90: New test.
2004-12-15 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.dg/ftrapv-2.c: New test.

View File

@ -0,0 +1,101 @@
! { dg-do run }
! Program to test reading in a list of integer values into REAL variables.
! The comma separator was not handled correctly.
!
program fg
character(len=80) buff
logical debug
debug = .FALSE.
a = 0
b = 0
c = 0
d = 0
write (buff,'(a)') '10,20,30,40'
read(buff,*) a, b, c, d
if (debug) then
print*,buff
print*,a, b, c, d
end if
if (abs(10. - a) > 1e-5) call abort
if (abs(20. - b) > 1e-5) call abort
if (abs(30. - c) > 1e-5) call abort
if (abs(40. - d) > 1e-5) call abort
a = 0
b = 0
c = 0
d = 0
write (buff,'(a)') '10.,20.,30.,40.'
read(buff,*) a, b, c, d
if (abs(10. - a) > 1e-5) call abort
if (abs(20. - b) > 1e-5) call abort
if (abs(30. - c) > 1e-5) call abort
if (abs(40. - d) > 1e-5) call abort
if (debug) then
print*,buff
print*,a, b, c, d
end if
a = 0
b = 0
c = 0
d = 0
write (buff,'(a)') '10.0,20.0,30.0,40.0'
read(buff,*) a, b, c, d
if (abs(10. - a) > 1e-5) call abort
if (abs(20. - b) > 1e-5) call abort
if (abs(30. - c) > 1e-5) call abort
if (abs(40. - d) > 1e-5) call abort
if (debug) then
print*,buff
print*,a, b, c, d
end if
a = 0
b = -99
c = 0
d = 0
write (buff,'(a)') '10.0,,30.0,40.0'
read(buff,*) a, b, c, d
if (abs(10. - a) > 1e-5) call abort
if (abs(-99. - b) > 1e-5) call abort
if (abs(30. - c) > 1e-5) call abort
if (abs(40. - d) > 1e-5) call abort
if (debug) then
print*,buff
print*,a, b, c, d
end if
call abc
end program
subroutine abc
character(len=80) buff
a = 0
b = 0
c = 0
d = 0
write (buff,'(a)') '10,-20,30,-40'
read(buff,*) a, b, c, d
if (abs(10. - a) > 1e-5) call abort
if (abs(-20. - b) > 1e-5) call abort
if (abs(30. - c) > 1e-5) call abort
if (abs(-40. - d) > 1e-5) call abort
end subroutine abc

View File

@ -1,3 +1,10 @@
2004-12-15 Bud Davis <bdavis9659@comcast.net>
Steven G. Kargl <kargls@comcast.net>
PR fortran/17597
* io/list_read.c (read_real): do not push back a comma when
it delimits a real value without a decimal point
2004-12-14 Steve Ellcey <sje@cup.hp.com>
* libgfortran/io/transfer.c (us_read): Use memcpy/memset

View File

@ -1043,7 +1043,7 @@ read_real (int length)
goto got_repeat;
CASE_SEPARATORS:
if (c != '\n')
if (c != '\n' && c != ',')
unget_char (c); /* Real number that is just a digit-string. */
goto done;