2004-06-25 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
authortobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 26 Jun 2004 11:48:55 +0000 (11:48 +0000)
committertobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 26 Jun 2004 11:48:55 +0000 (11:48 +0000)
Andrew Vaught <andyv@firstinter.net>

PR fortran/15190
* decl.c (gfc_match_type_spec), io.c (match_io), parse.c
(decode_statement): Enforce required space in free-form.

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

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/fortran/io.c
gcc/fortran/parse.c

index a2bb02c..581c7fa 100644 (file)
@@ -1,3 +1,10 @@
+2004-06-25  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
+       Andrew Vaught <andyv@firstinter.net>
+
+       PR fortran/15190
+       * decl.c (gfc_match_type_spec), io.c (match_io), parse.c
+       (decode_statement): Enforce required space in free-form.
+
 2004-06-21  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * f95-lang.c (LANG_HOOKS_GIMPLE_BEFORE_INLINING): Deleted.
index c6b8073..2790865 100644 (file)
@@ -884,6 +884,7 @@ gfc_match_type_spec (gfc_typespec * ts, int kind_flag)
   char name[GFC_MAX_SYMBOL_LEN + 1];
   gfc_symbol *sym;
   match m;
+  int c;
 
   gfc_clear_ts (ts);
 
@@ -962,6 +963,14 @@ get_kind:
   if (kind_flag == 0)
     return MATCH_YES;
 
+  if (gfc_current_form == FORM_FREE)
+    {
+      c = gfc_peek_char();
+      if (!gfc_is_whitespace(c) && c != '*' && c != '('
+         && c != ':' && c != ',')
+       return MATCH_NO;
+    }
+
   m = gfc_match_kind_spec (ts);
   if (m == MATCH_NO && ts->type != BT_CHARACTER)
     m = gfc_match_old_kind_spec (ts);
index ee52c69..048f6f8 100644 (file)
@@ -2046,7 +2046,7 @@ match_io (io_kind k)
   gfc_code *io_code;
   gfc_symbol *sym;
   gfc_expr *expr;
-  int comma_flag;
+  int comma_flag, c;
   locus where;
   gfc_dt *dt;
   match m;
@@ -2059,6 +2059,16 @@ match_io (io_kind k)
       if (k == M_WRITE)
        goto syntax;
 
+      if (gfc_current_form == FORM_FREE)
+       {
+         c = gfc_peek_char();
+         if (c != ' ' && c != '*' && c != '\'' && c != '"')
+           {
+             m = MATCH_NO;
+             goto cleanup;
+           }
+       }
+
       m = match_dt_format (dt);
       if (m == MATCH_ERROR)
        goto cleanup;
index 8b8aa5a..3983db7 100644 (file)
@@ -177,7 +177,7 @@ decode_statement (void)
 
     case 'b':
       match ("backspace", gfc_match_backspace, ST_BACKSPACE);
-      match ("block data", gfc_match_block_data, ST_BLOCK_DATA);
+      match ("block data", gfc_match_block_data, ST_BLOCK_DATA);
       break;
 
     case 'c':
@@ -206,7 +206,7 @@ decode_statement (void)
       if (gfc_match_end (&st) == MATCH_YES)
        return st;
 
-      match ("entry", gfc_match_entry, ST_ENTRY);
+      match ("entry", gfc_match_entry, ST_ENTRY);
       match ("equivalence", gfc_match_equivalence, ST_EQUIVALENCE);
       match ("external", gfc_match_external, ST_ATTR_DECL);
       break;
@@ -229,7 +229,7 @@ decode_statement (void)
       break;
 
     case 'm':
-      match ("module% procedure", gfc_match_modproc, ST_MODULE_PROC);
+      match ("module% procedure", gfc_match_modproc, ST_MODULE_PROC);
       match ("module", gfc_match_module, ST_MODULE);
       break;
 
@@ -273,7 +273,7 @@ decode_statement (void)
       break;
 
     case 'u':
-      match ("use", gfc_match_use, ST_USE);
+      match ("use", gfc_match_use, ST_USE);
       break;
 
     case 'w':