OSDN Git Service

2006-05-29 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 29 May 2006 19:33:43 +0000 (19:33 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 29 May 2006 19:33:43 +0000 (19:33 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114213 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/gfortran.texi
gcc/fortran/io.c

index e559805..701f236 100644 (file)
@@ -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
index 07edb8a..bfafbfc 100644 (file)
@@ -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
index 4a55cbd..aab5d39 100644 (file)
@@ -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 ();