summaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>2006-10-16 00:51:46 +0000
committerkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>2006-10-16 00:51:46 +0000
commit74068f17b727e93c6d7a135813500f3b68962278 (patch)
tree97c5d55955c6e89496c7e3232786688b385f7b7c /gcc/fortran
parenta5949eac36b1dd9490160f3e29999a21ea3e30fe (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/fortran/io.c25
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 */