From c9f4aa9767727934160c65b63ec69b88e93ec062 Mon Sep 17 00:00:00 2001 From: Jerry DeLisle <jvdelisle@gcc.gnu.org> Date: Mon, 29 May 2006 19:33:43 +0000 Subject: [PATCH] re PR fortran/27634 (formatted reading/writing: real format without dot) 2006-05-29 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/27634 * io.c (check_format): Add error for missing period in format specifier unless -std=legacy. * gfortran.texi: Add description of expanded namelist read and missing period in format extensions. From-SVN: r114213 --- gcc/fortran/ChangeLog | 8 ++++++++ gcc/fortran/gfortran.texi | 27 ++++++++++++++++++++++++++- gcc/fortran/io.c | 19 ++++++++++++++----- 3 files changed, 48 insertions(+), 6 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e55980554428..701f236f1095 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2006-05-29 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/27634 + * io.c (check_format): Add error for missing period in format + specifier unless -std=legacy. + * gfortran.texi: Add description of expanded namelist read and + missing period in format extensions. + 2006-05-29 Francois-Xavier Coudert <coudert@clipper.ens.fr> PR fortran/19777 diff --git a/gcc/fortran/gfortran.texi b/gcc/fortran/gfortran.texi index 07edb8a6b162..bfafbfc09e0f 100644 --- a/gcc/fortran/gfortran.texi +++ b/gcc/fortran/gfortran.texi @@ -607,7 +607,7 @@ this is also missing, the default is @file{/tmp}. @node GFORTRAN_UNBUFFERED_ALL @section @env{GFORTRAN_UNBUFFERED_ALL}---Don't buffer output -This environment variable controls wether all output is unbuffered. +This environment variable controls whether all output is unbuffered. If the first letter is @samp{y}, @samp{Y} or @samp{1}, all output is unbuffered. This will slow down large writes. If the first letter is @samp{n}, @samp{N} or @samp{0}, output is buffered. This is the @@ -743,6 +743,7 @@ of extensions, and @option{-std=legacy} allows both without warning. * Extensions to namelist:: * X format descriptor:: * Commas in FORMAT specifications:: +* Missing period in FORMAT specifications:: * I/O item lists:: * Hexadecimal constants:: * Real array indices:: @@ -857,6 +858,15 @@ PROGRAM test_print END PROGRAM test_print @end smallexample +Expanded namelist reads are permitted. This causes an error if -std=f95 +is used. In the following example, the first element of the array will be +given the value 0.00 and succeeding elements will be 1.00 and 2.00. +@smallexample +&MYNML + X(1,1) = 0.00 , 1.00 , 2.00 +/ +@end smallexample + @node X format descriptor @section X format descriptor @cindex X format descriptor @@ -883,6 +893,21 @@ descriptors in FORMAT statements. 10 FORMAT ('FOO='I1' BAR='I2) @end smallexample + +@node Missing period in FORMAT specifications +@section Missing period in FORMAT specifications +@cindex Missing period in FORMAT specifications + +To support legacy codes, @command{gfortran} allows missing periods in format +specifications if and only if -std=legacy is given on the command line. This +is considered non-conforming code and is discouraged. + +@smallexample + REAL :: value + READ(*,10) value +10 FORMAT ('F4') +@end smallexample + @node I/O item lists @section I/O item lists @cindex I/O item lists diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 4a55cbd8d87c..aab5d39dc34e 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -413,7 +413,6 @@ static try check_format (void) { const char *posint_required = _("Positive width required"); - const char *period_required = _("Period required"); const char *nonneg_required = _("Nonnegative width required"); const char *unexpected_element = _("Unexpected element"); const char *unexpected_end = _("Unexpected end of format string"); @@ -610,8 +609,13 @@ data_desc: u = format_lex (); if (u != FMT_PERIOD) { - error = period_required; - goto syntax; + /* Warn if -std=legacy, otherwise error. */ + if (gfc_option.warn_std != 0) + gfc_error_now ("Period required in format specifier at %C"); + else + gfc_warning ("Period required in format specifier at %C"); + saved_token = u; + break; } u = format_lex (); @@ -653,8 +657,13 @@ data_desc: t = format_lex (); if (t != FMT_PERIOD) { - error = period_required; - goto syntax; + /* Warn if -std=legacy, otherwise error. */ + if (gfc_option.warn_std != 0) + gfc_error_now ("Period required in format specifier at %C"); + else + gfc_warning ("Period required in format specifier at %C"); + saved_token = t; + break; } t = format_lex (); -- GitLab