OSDN Git Service

2006-10-15 Steven G. Kargl <kargl@gcc.gnu.org>
authorkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Oct 2006 00:51:46 +0000 (00:51 +0000)
committerkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Oct 2006 00:51:46 +0000 (00:51 +0000)
    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

gcc/fortran/ChangeLog
gcc/fortran/io.c

index 3e70f31..aa06cf3 100644 (file)
@@ -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
index 20bf262..b0dfa8f 100644 (file)
@@ -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 */