OSDN Git Service

2009-10-11 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Oct 2009 17:37:50 +0000 (17:37 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Oct 2009 17:37:50 +0000 (17:37 +0000)
PR libgfortran/38439
* io/format.c (parse_format_list): Add check for tokens not allowed
after P specifier. Fix comments.  Remove un-needed code. Fix the
default exponent list. Correct pointer assignment error.

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

libgfortran/ChangeLog
libgfortran/io/format.c

index 014d883..0984287 100644 (file)
@@ -1,3 +1,10 @@
+2009-10-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/38439
+       * io/format.c (parse_format_list): Add check for tokens not allowed
+       after P specifier. Fix comments.  Remove un-needed code. Fix the
+       default exponent list. Correct pointer assignment error.
+
 2009-10-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/35862
index 4ab70e8..7e46e3a 100644 (file)
@@ -706,6 +706,12 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
          goto data_desc;
        }
 
+      if (t != FMT_COMMA && t != FMT_RPAREN && t != FMT_SLASH)
+       {
+         fmt->error = "Comma required after P descriptor";
+         goto finished;
+       }
+
       fmt->saved_token = t;
       goto optional_comma;
 
@@ -734,7 +740,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
       goto between_desc;
 
     case FMT_STRING:
-      /* TODO: Find out why is is necessary to turn off format caching.  */
+      /* TODO: Find out why it is necessary to turn off format caching.  */
       saveit = false;
       get_fnode (fmt, &head, &tail, FMT_STRING);
       tail->u.string.p = fmt->string;
@@ -851,19 +857,6 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
  data_desc:
   switch (t)
     {
-    case FMT_P:
-      t = format_lex (fmt);
-      if (t == FMT_POSINT)
-       {
-         fmt->error = "Repeat count cannot follow P descriptor";
-         goto finished;
-       }
-
-      fmt->saved_token = t;
-      get_fnode (fmt, &head, &tail, FMT_P);
-
-      goto optional_comma;
-
     case FMT_L:
       t = format_lex (fmt);
       if (t != FMT_POSINT)
@@ -971,6 +964,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
            }
          fmt->saved_token = t;
          tail->u.real.d = 0;
+         tail->u.real.e = -1;
          break;
        }
 
@@ -982,11 +976,11 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
        }
 
       tail->u.real.d = fmt->value;
+      tail->u.real.e = -1;
 
-      if (t == FMT_D || t == FMT_F)
+      if (t2 == FMT_D || t2 == FMT_F)
        break;
 
-      tail->u.real.e = -1;
 
       /* Look for optional exponent */
       t = format_lex (fmt);