From 57504df9ee4a500f71fd9f656b4ad278b3dbbb97 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Sun, 12 Jun 2005 21:59:17 +0200 Subject: [PATCH] re PR libfortran/19155 ([4.0 only] blanks not treated as zeros in 'E' format read (NIST FM110.FOR)) PR libfortran/19155 * io/read.c (read_f): Take care of spaces after initial sign. * gfortran.dg/pr19155.f: Add test. From-SVN: r100861 --- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gfortran.dg/pr19155.f | 5 ++++ libgfortran/ChangeLog | 5 ++++ libgfortran/io/read.c | 42 +++++++++++++++-------------- 4 files changed, 37 insertions(+), 20 deletions(-) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 72c1e8811a3..7278d612927 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-06-12 Francois-Xavier Coudert + + PR libfortran/19155 + * gfortran.dg/pr19155.f: Add test. + 2005-06-12 Tobias Schl"uter * gfortran.dg/f2c_7.f90: New test. diff --git a/gcc/testsuite/gfortran.dg/pr19155.f b/gcc/testsuite/gfortran.dg/pr19155.f index ccd391520b1..6387c3f9ce3 100644 --- a/gcc/testsuite/gfortran.dg/pr19155.f +++ b/gcc/testsuite/gfortran.dg/pr19155.f @@ -5,6 +5,7 @@ ! but doesn't require us to issue an error. Since g77 accepts this as zero, ! we do the same. real a + character*10 c a = 42 open (19,status='scratch') write (19,'(A15)') 'E+00' @@ -12,4 +13,8 @@ read (19,'(E15.8)') a if (a .ne. 0) call abort close (19) + + c = "+ " + read (c,"(F10.4)") a + if (a /= 0) call abort end diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 86a04e804b2..79e09f67042 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2005-06-12 Francois-Xavier Coudert + + PR libfortran/19155 + * io/read.c (read_f): Take care of spaces after initial sign. + 2005-06-09 Thomas Koenig PR libfortran/21480 diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c index 1c8b3b0daa8..fbd38f13bec 100644 --- a/libgfortran/io/read.c +++ b/libgfortran/io/read.c @@ -504,23 +504,7 @@ read_f (fnode * f, char *dest, int length) p = eat_leading_spaces (&w, p); if (w == 0) - { - switch (length) - { - case 4: - *((float *) dest) = 0.0f; - break; - - case 8: - *((double *) dest) = 0.0; - break; - - default: - internal_error ("Unsupported real kind during IO"); - } - - return; - } + goto zero; /* Optional sign */ @@ -529,12 +513,13 @@ read_f (fnode * f, char *dest, int length) if (*p == '-') val_sign = -1; p++; - - if (--w == 0) - goto bad_float; + w--; } exponent_sign = 1; + p = eat_leading_spaces (&w, p); + if (w == 0) + goto zero; /* A digit, a '.' or a exponent character ('e', 'E', 'd' or 'D') is required at this point */ @@ -604,6 +589,23 @@ read_f (fnode * f, char *dest, int length) generate_error (ERROR_READ_VALUE, "Bad value during floating point read"); return; + /* The value read is zero */ + zero: + switch (length) + { + case 4: + *((float *) dest) = 0.0f; + break; + + case 8: + *((double *) dest) = 0.0; + break; + + default: + internal_error ("Unsupported real kind during IO"); + } + return; + /* At this point the start of an exponent has been found */ exp1: while (w > 0 && *p == ' ') -- 2.30.2