diff options
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 8 | ||||
-rw-r--r-- | libgfortran/io/format.c | 4 | ||||
-rw-r--r-- | libgfortran/io/write_float.def | 4 |
3 files changed, 14 insertions, 2 deletions
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 <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 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; |