diff options
author | Tobias Schlüter <tobias.schlueter@physik.uni-muenchen.de> | 2004-06-26 13:48:55 +0200 |
---|---|---|
committer | Tobias Schlüter <tobi@gcc.gnu.org> | 2004-06-26 13:48:55 +0200 |
commit | 0ff0dfbf18bc964cf71b64dc6f1f1298bea12d04 (patch) | |
tree | ca81227af63fdf3b92639bbe4738863f47220ab2 | |
parent | e9e4d4ee5bd8785e26bc03f932ffbcfd6b19b918 (diff) | |
download | gcc-0ff0dfbf18bc964cf71b64dc6f1f1298bea12d04.zip gcc-0ff0dfbf18bc964cf71b64dc6f1f1298bea12d04.tar.gz gcc-0ff0dfbf18bc964cf71b64dc6f1f1298bea12d04.tar.bz2 |
Andrew Vaught <andyv@firstinter.net>
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.
Co-Authored-By: Andrew Vaught <andyv@firstinter.net>
From-SVN: r83708
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 9 | ||||
-rw-r--r-- | gcc/fortran/io.c | 12 | ||||
-rw-r--r-- | gcc/fortran/parse.c | 8 |
4 files changed, 31 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index a2bb02c..581c7fa 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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. diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index c6b8073..2790865 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -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); diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index ee52c69..048f6f8 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -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; diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 8b8aa5a..3983db7 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -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': |