re PR fortran/16404 (should reject invalid code with -pedantic -std=f95 ? (x8))
authorTobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>
Sun, 11 Jul 2004 14:16:32 +0000 (16:16 +0200)
committerTobias Schlüter <tobi@gcc.gnu.org>
Sun, 11 Jul 2004 14:16:32 +0000 (16:16 +0200)
PR fortran/16404
* match.c (gfc_match_program): A program name is obligatory.
(gfc_match_return): RETURN in main program is an extension.
(gfc_match_block_data): A space is required before a block data
name.

From-SVN: r84511

gcc/fortran/ChangeLog
gcc/fortran/match.c

index 4ed7899f6e40a092e294d58ff935fe9bc8a514ff..a787c9dcbeeee24730b851e39e9775ac17caa083 100644 (file)
@@ -6,6 +6,12 @@
 
        PR fortran/16404
        * io.c (match_io): Flag 'WRITE(...), ...' as extension.
+
+       PR fortran/16404
+       * match.c (gfc_match_program): A program name is obligatory.
+       (gfc_match_return): RETURN in main program is an extension.
+       (gfc_match_block_data): A space is required before a block data
+       name.
        
 2004-07-11  Joseph S. Myers  <jsm@polyomino.org.uk>
 
index 040142f766ceef60c2402af0bc6a95a8ff95b576..0b9dc7307d5e8146e13b197b6ccf47aa20caf5dc 100644 (file)
@@ -791,7 +791,7 @@ not_yes:
 /*********************** Statement level matching **********************/
 
 /* Matches the start of a program unit, which is the program keyword
-   followed by an optional symbol.  */
+   followed by an obligatory symbol.  */
 
 match
 gfc_match_program (void)
@@ -799,10 +799,6 @@ gfc_match_program (void)
   gfc_symbol *sym;
   match m;
 
-  m = gfc_match_eos ();
-  if (m == MATCH_YES)
-    return m;
-
   m = gfc_match ("% %s%t", &sym);
 
   if (m == MATCH_NO)
@@ -1897,6 +1893,13 @@ gfc_match_return (void)
 {
   gfc_expr *e;
   match m;
+  gfc_compile_state s;
+
+  gfc_enclosing_unit (&s);
+  if (s == COMP_PROGRAM
+      && gfc_notify_std (GFC_STD_GNU, "RETURN statement in a main "
+                        "program at %C is an extension.") == FAILURE)
+      return MATCH_ERROR;
 
   e = NULL;
   if (gfc_match_eos () == MATCH_YES)
@@ -2295,7 +2298,7 @@ gfc_match_block_data (void)
       return MATCH_YES;
     }
 
-  m = gfc_match (" %n%t", name);
+  m = gfc_match ("% %n%t", name);
   if (m != MATCH_YES)
     return MATCH_ERROR;