[patch,libgfortran] Fix NIST fm906.for - redux
Paul Thomas
paulthomas2@wanadoo.fr
Mon Jul 11 20:13:00 GMT 2005
Apologies, I sent an intermediate version of the patch, which was out of
kilter with the remarks; this is what I am proposing to commit.
Paul T
> I have responded to the comment from Brooks Moses, for which I am
> grateful. In fact, I took the opportunity to change the treatment so
> that CR/LF is handled. This has been done so that any number of EORs
> can occur before the comma or the imaginary part. The testcase has
> been modified to include EOR before the comma and EORs either side of
> the comma.
>
> You will find the proposed ChangeLog entries, the patch and the
> testcase attached.
>
> Regtested on RH9/Athlon.
>
> OK to commit to 4.1 and, sometime, to 4.0?
>
> Paul T
>
>------------------------------------------------------------------------
>
>2005-07-11 Paul Thomas <pault@gcc.gnu.org>
>
> * list_read.c (read_complex): Allow complex data in list-
> directed reads to have eols either side of the comma to
> fix NIST FM906.FOR failure.
>
>2005-07-11 Paul Thomas <pault@gcc.gnu.org>
>
> * gfortran.dg/complex_read.f90: New.
>
>
Correct version that I propose to commit.
>Index: gcc/libgfortran/io/list_read.c
>===================================================================
>RCS file: /cvs/gcc/gcc/libgfortran/io/list_read.c,v
>retrieving revision 1.24
>diff -c -3 -p -r1.24 list_read.c
>*** gcc/libgfortran/io/list_read.c 23 Jun 2005 18:50:24 -0000 1.24
>--- gcc/libgfortran/io/list_read.c 11 Jul 2005 20:00:15 -0000
>*************** read_complex (int length)
>*** 984,994 ****
>--- 984,1008 ----
> if (parse_real (value, length))
> return;
>
>+ eol_1:
> eat_spaces ();
>+ c = next_char ();
>+ if (c == '\n' || c== '\r')
>+ goto eol_1;
>+ else
>+ unget_char (c);
>+
> if (next_char () != ',')
> goto bad_complex;
>
>+ eol_2:
> eat_spaces ();
>+ c = next_char ();
>+ if (c == '\n' || c== '\r')
>+ goto eol_2;
>+ else
>+ unget_char (c);
>+
> if (parse_real (value + length, length))
> return;
>
>
>
>!===================================================================
>
>! { dg-do run }
>! Test of the fix to the bug in NIST fm906.for.
>! Contributed by Paul Thomas <pault@gcc.gnu.org>
>!
>program complex_read
> complex :: a
> open (10, status="scratch")
>
>! Test that we have not broken the one line form.
>
> write (10, *) " ( 0.99 , 9.9 )"
> rewind (10)
> read (10,*) a
> if (a.ne.(0.99,9.90)) call abort ()
>
>! Test a new record after the.comma (the original bug).
>
> rewind (10)
> write (10, *) " ( 99.0 ,"
> write (10, *) " 999.0 )"
> rewind (10)
> read (10,*) a
> if (a.ne.(99.0,999.0)) call abort ()
>
>! Test a new record before the.comma
>
> rewind (10)
> write (10, *) " ( 0.99 "
> write (10, *) " , 9.9 )"
> rewind (10)
> read (10,*) a
> if (a.ne.(0.99,9.90)) call abort ()
>
>! Test a new records before and after the.comma
>
> rewind (10)
> write (10, *) " ( 99.0 "
> write (10, *) ", "
> write (10, *) " 999.0 )"
> rewind (10)
> read (10,*) a
> if (a.ne.(99.0,999.0)) call abort ()
>
> close (10)
>end program complex_read
>
>
>
More information about the Fortran
mailing list