[gcc(refs/users/marxin/heads/marxin-gcc-benchmark-branch)] PR90374 Zero width format specifiers.

Martin Liska marxin@gcc.gnu.org
Mon Mar 30 10:14:20 GMT 2020


https://gcc.gnu.org/g:82033483fd74b1dcedab416d98673e212258498d

commit 82033483fd74b1dcedab416d98673e212258498d
Author: Jerry DeLisle <jvdelisle@gcc.gnu.org>
Date:   Fri Jan 17 11:26:10 2020 -0800

    PR90374 Zero width format specifiers.
    
            PR libfortran/90374
            * io/format.c (parse_format_list): Zero width not allowed with
            FMT_D.
            * io/write_float.def (build_float_string): Include range of
            higher exponent values that require wider width.

Diff:
---
 libgfortran/ChangeLog          | 8 ++++++++
 libgfortran/io/format.c        | 4 +++-
 libgfortran/io/write_float.def | 4 +++-
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 840642cd660..bd2d87eab01 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,11 @@
+2020-01-17  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+	PR libfortran/90374
+	* io/format.c (parse_format_list): Zero width not allowed with
+	FMT_D.
+	* io/write_float.def (build_float_string): Include range of
+	higher exponent values that require wider width.
+
 2020-01-01  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
 	PR libfortran/90374
diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c
index b42a5593e38..3be861fb19c 100644
--- a/libgfortran/io/format.c
+++ b/libgfortran/io/format.c
@@ -954,7 +954,9 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
 	    }
 	  tail->u.real.d = fmt->value;
 	  
-	  /* Look for optional exponent */
+	  /* Look for optional exponent, not allowed for FMT_D */
+	  if (t == FMT_D)
+	    break;
 	  u = format_lex (fmt);
 	  if (u != FMT_E)
 	    fmt->saved_token = u;
diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def
index 75c7942c4c5..8a1be054371 100644
--- a/libgfortran/io/write_float.def
+++ b/libgfortran/io/write_float.def
@@ -497,7 +497,9 @@ build_float_string (st_parameter_dt *dtp, const fnode *f, char *buffer,
       else if (f->u.real.e == 0)
 	{
 	  /* Zero width specified, no leading zeros in exponent  */
-	  if (e > 99 || e < -99)
+	  if (e > 999 || e < -999)
+	    edigits = 6;
+	  else if (e > 99 || e < -99)
 	    edigits = 5;
 	  else if (e > 9 || e < -9)
 	    edigits = 4;


More information about the Gcc-cvs mailing list