2007-11-30 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Nov 2007 23:19:34 +0000 (23:19 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Nov 2007 23:19:34 +0000 (23:19 +0000)
PR libfortran/34291
* io/list_read.c (read_character): When reading an unquoted string,
return if special characters that could signify the end of the namelist
read are encountered.

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

libgfortran/ChangeLog
libgfortran/io/list_read.c

index 69fca51..def1ef1 100644 (file)
@@ -1,3 +1,10 @@
+2007-11-30  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/34291
+       * io/list_read.c (read_character): When reading an unquoted string,
+       return if special characters that could signify the end of the namelist
+       read are encountered.
+
 2007-11-29  Steven G. Kargl  <kargls@comcast.net>
 
        PR libfortran/33583
index 96cef54..586e356 100644 (file)
@@ -896,7 +896,8 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
       if (dtp->u.p.namelist_mode)
        {
          if (dtp->u.p.current_unit->flags.delim == DELIM_APOSTROPHE
-             || dtp->u.p.current_unit->flags.delim == DELIM_QUOTE)
+             || dtp->u.p.current_unit->flags.delim == DELIM_QUOTE
+             || c == '&' || c == '$' || c == '/')
            {
              unget_char (dtp, c);
              return;
@@ -923,8 +924,9 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
                      goto get_string;
                    }
                }
+
              l_push_char (dtp, c);
+
              if (c == '=' || c == '(')
                {
                  dtp->u.p.item_count = 0;
@@ -936,6 +938,7 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
 
          /* The string is too long to be a valid object name so assume that it
             is a string to be read in as a value.  */
+         dtp->u.p.item_count = 0;
          dtp->u.p.line_buffer_enabled = 1;
          goto get_string;
        }