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: [patch,libgfortran] Fix NIST fm906.for - redux


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







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