diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-10-31 19:59:04 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-10-31 19:59:04 +0000 |
commit | 120a4c45731e133355d46fc39d7a77ed9c67d67c (patch) | |
tree | 292ac1fe7c5478186685607a63e690054cfb4986 /gcc/fortran/io.c | |
parent | 5cea3ad6b50bc3bc014b3ce26774e99789c14a2f (diff) | |
download | gcc-120a4c45731e133355d46fc39d7a77ed9c67d67c.zip gcc-120a4c45731e133355d46fc39d7a77ed9c67d67c.tar.gz gcc-120a4c45731e133355d46fc39d7a77ed9c67d67c.tar.bz2 |
re PR fortran/54679 (Erroneous "Expected P edit descriptor" in conjunction with L descriptor)
2016-10-31 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/54679
* io.c (check_format): Adjust checks for FMT_L to treat a zero
width as an extension, giving warnings or error as appropriate.
Improve messages.
PR libgfortran/54679
* io/format.c (parse_format_list): Adjust checks for FMT_L to
treat a zero width as an extension, giving warnings or error
as appropriate. Improve messages.
PR fortran/54679
* gfortran.dg/fmt_l.f90: Update test.
* gfortran.dg/fmt_l0.f90: New test.
From-SVN: r241720
Diffstat (limited to 'gcc/fortran/io.c')
-rw-r--r-- | gcc/fortran/io.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index dce0f7c..80cf830 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -601,7 +601,7 @@ check_format (bool is_input) const char *unexpected_end = _("Unexpected end of format string"); const char *zero_width = _("Zero width in format descriptor"); - const char *error; + const char *error = NULL; format_token t, u; int level; int repeat; @@ -867,27 +867,31 @@ data_desc: goto fail; if (t == FMT_POSINT) break; - - switch (gfc_notification_std (GFC_STD_GNU)) + if (mode != MODE_FORMAT) + format_locus.nextc += format_string_pos; + if (t == FMT_ZERO) { - case WARNING: - if (mode != MODE_FORMAT) - format_locus.nextc += format_string_pos; - gfc_warning (0, "Extension: Missing positive width after L " - "descriptor at %L", &format_locus); - saved_token = t; - break; - - case ERROR: - error = posint_required; - goto syntax; - - case SILENT: - saved_token = t; - break; - - default: - gcc_unreachable (); + switch (gfc_notification_std (GFC_STD_GNU)) + { + case WARNING: + gfc_warning (0, "Extension: Zero width after L " + "descriptor at %L", &format_locus); + break; + case ERROR: + gfc_error ("Extension: Zero width after L " + "descriptor at %L", &format_locus); + goto fail; + case SILENT: + break; + default: + gcc_unreachable (); + } + } + else + { + saved_token = t; + gfc_notify_std (GFC_STD_GNU, "Missing positive width after " + "L descriptor at %L", &format_locus); } break; |