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:
parent
5cea3ad6b5
commit
120a4c4573
7 changed files with 85 additions and 43 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)" }
|
||||
|
|
12
gcc/testsuite/gfortran.dg/fmt_l0.f90
Normal file
12
gcc/testsuite/gfortran.dg/fmt_l0.f90
Normal 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)" }
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue