From 82033483fd74b1dcedab416d98673e212258498d Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Fri, 17 Jan 2020 11:26:10 -0800 Subject: 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. --- libgfortran/ChangeLog | 8 ++++++++ libgfortran/io/format.c | 4 +++- libgfortran/io/write_float.def | 4 +++- 3 files changed, 14 insertions(+), 2 deletions(-) (limited to 'libgfortran') diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 840642c..bd2d87e 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,11 @@ +2020-01-17 Jerry DeLisle + + 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 PR libfortran/90374 diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c index b42a559..3be861f 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 75c7942..8a1be05 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; -- cgit v1.1