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
This commit is contained in:
Jerry DeLisle 2016-10-31 19:59:04 +00:00
parent 5cea3ad6b5
commit 120a4c4573
7 changed files with 85 additions and 43 deletions

View File

@ -1,3 +1,10 @@
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.
2016-10-31 Jakub Jelinek <jakub@redhat.com>
* trans-types.c (gfc_get_array_descr_info): For -gdwarf-5 or

View File

@ -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;

View File

@ -1,3 +1,9 @@
2016-10-31 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/54679
* gfortran.dg/fmt_l.f90: Update test.
* gfortran.dg/fmt_l0.f90: New test.
2016-10-31 Jakub Jelinek <jakub@redhat.com>
PR c++/78089

View File

@ -52,34 +52,34 @@ program test_l
end program test_l
! { dg-output "At line 14 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 15 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 19 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 20 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 24 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 25 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 29 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 30 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 34 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 35 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 39 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 40 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 44 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 45 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 49 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }
! { dg-output "At line 50 of file.*" }
! { dg-output "Fortran runtime warning: Positive width required in format(\n|\r\n|\r)" }
! { dg-output "Fortran runtime warning: Positive width required with L descriptor(\n|\r\n|\r)" }

View File

@ -0,0 +1,12 @@
! { dg-do run }
! { dg-options "-std=gnu -pedantic" }
! Test the GNU extension of a L format descriptor without width
! PR libfortran/54679
program main
implicit none
character(len=20) :: str
character(len=60) :: format2 = "(2(1x,l0,1x))"
write(str,format2)
end program main
! { dg-output "At line 9 of file.*" }
! { dg-output "Fortran runtime warning: Zero width after L descriptor(\n|\r\n|\r)" }

View File

@ -1,3 +1,10 @@
2016-10-31 Jerry DeLisle <jvdelisle@gcc.gnu.org>
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.
2016-10-30 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/78123

View File

@ -870,19 +870,25 @@ parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
t = format_lex (fmt);
if (t != FMT_POSINT)
{
if (notification_std(GFC_STD_GNU) == NOTIFICATION_ERROR)
if (t == FMT_ZERO)
{
fmt->error = posint_required;
goto finished;
if (notification_std(GFC_STD_GNU) == NOTIFICATION_ERROR)
{
fmt->error = "Extension: Zero width after L descriptor";
goto finished;
}
else
notify_std (&dtp->common, GFC_STD_GNU,
"Zero width after L descriptor");
}
else
{
fmt->saved_token = t;
fmt->value = 1; /* Default width */
notify_std (&dtp->common, GFC_STD_GNU, posint_required);
notify_std (&dtp->common, GFC_STD_GNU,
"Positive width required with L descriptor");
}
fmt->value = 1; /* Default width */
}
get_fnode (fmt, &head, &tail, FMT_L);
tail->u.n = fmt->value;
tail->repeat = repeat;