diff options
author | kargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-10-16 00:51:46 +0000 |
---|---|---|
committer | kargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-10-16 00:51:46 +0000 |
commit | 74068f17b727e93c6d7a135813500f3b68962278 (patch) | |
tree | 97c5d55955c6e89496c7e3232786688b385f7b7c /gcc/fortran | |
parent | a5949eac36b1dd9490160f3e29999a21ea3e30fe (diff) | |
download | gcc-74068f17b727e93c6d7a135813500f3b68962278.tar.gz |
2006-10-15 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/29403
* io.c (match_io): Check for a default-char-expr for PRINT format.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@117764 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/io.c | 25 |
2 files changed, 26 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 3e70f31ae86..aa06cf314d3 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2006-10-15 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/29403 + * io.c (match_io): Check for a default-char-expr for PRINT format. + 2006-10-15 Bernhard Fischer <aldot@gcc.gnu.org> PR fortran/24767 diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 20bf26215d5..b0dfa8f0311 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -2744,7 +2744,8 @@ match_io (io_kind k) where = gfc_current_locus; comma_flag = 0; current_dt = dt = gfc_getmem (sizeof (gfc_dt)); - if (gfc_match_char ('(') == MATCH_NO) + m = gfc_match_char ('('); + if (m == MATCH_NO) { where = gfc_current_locus; if (k == M_WRITE) @@ -2796,9 +2797,25 @@ match_io (io_kind k) } else { - /* Error for constructs like print (1,*). */ - if (k == M_PRINT) - goto syntax; + /* Before issuing an error for a malformed 'print (1,*)' type of + error, check for a default-char-expr of the form ('(I0)'). */ + + if (k == M_PRINT && m == MATCH_YES) + { + /* Reset current locus to get the initial '(' in an expression. */ + gfc_current_locus = where; + dt->format_expr = NULL; + m = match_dt_format (dt); + + if (m == MATCH_ERROR) + goto cleanup; + if (m == MATCH_NO || dt->format_expr == NULL) + goto syntax; + + comma_flag = 1; + dt->io_unit = default_unit (k); + goto get_io_list; + } } /* Match a control list */ |