diff options
author | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-12-20 08:16:48 +0000 |
---|---|---|
committer | burnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-12-20 08:16:48 +0000 |
commit | bd27f10defae57d8ca9f20a3bb135eb8f8928a09 (patch) | |
tree | eab804f70961f5d88c426a50b8e0c132732f0dd4 | |
parent | cb989427b3d6fb67e4182b701af7e0a18c2e20d2 (diff) | |
download | gcc-bd27f10defae57d8ca9f20a3bb135eb8f8928a09.tar.gz |
2007-12-20 Tobias Burnus <burnus@net-b.de>
PR fortran/34530
* io/list_read.c (eat_line): Move up in the file.
(eat_separator): In namelist mode, skip over comment lines.
2007-12-20 Tobias Burnus <burnus@net-b.de>
PR fortran/34530
* gfortran.dg/namelist_44.f90: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@131099 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/namelist_44.f90 | 29 | ||||
-rw-r--r-- | libgfortran/ChangeLog | 6 | ||||
-rw-r--r-- | libgfortran/io/list_read.c | 37 |
4 files changed, 62 insertions, 15 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 231375bc374..3c67c45c256 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2007-12-20 Tobias Burnus <burnus@net-b.de> + PR fortran/34530 + * gfortran.dg/namelist_44.f90: New. + +2007-12-20 Tobias Burnus <burnus@net-b.de> + PR fortran/34482 * gfortran.dg/boz_8.f90: Add error-check check. * gfortran.dg/boz_9.f90: Shorten BOZ where needed, replace diff --git a/gcc/testsuite/gfortran.dg/namelist_44.f90 b/gcc/testsuite/gfortran.dg/namelist_44.f90 new file mode 100644 index 00000000000..5922d43964a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/namelist_44.f90 @@ -0,0 +1,29 @@ +! { dg-do run } +! +! PR fortran/34530 +! +! Skipping over comment line was not working +! +! Test case contributed by Harald Anlauf. +! +program gfcbug77 + implicit none + + character(len=128) :: file = "" + logical :: default + namelist /BLACKLIST/ file, default + integer, parameter :: nnml = 10 + default = .true. + + open (nnml, file='gfcbug77.nml') + write(nnml,*) "&blacklist " ! The trailing space breaks gfortran + write(nnml,*) " ! This is a comment within the namelist" + write(nnml,*) " file = 'myfile'" + write(nnml,*) " default = F" + write(nnml,*) "/" + rewind(nnml) + read (nnml, nml=BLACKLIST) + close(nnml) + if(file /= "myfile" .or. default) call abort() +! write (*,nml=BLACKLIST) +end program gfcbug77 diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 286524b35c2..9d84e1bd5fa 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2007-12-19 Tobias Burnus <burnus@net-b.de> + + PR fortran/34530 + * io/list_read.c (eat_line): Move up in the file. + (eat_separator): In namelist mode, skip over comment lines. + 2007-12-16 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/34427 diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index df43589cad0..06fd8a151ea 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -275,6 +275,20 @@ eat_spaces (st_parameter_dt *dtp) } +/* This function reads characters through to the end of the current line and + just ignores them. */ + +static void +eat_line (st_parameter_dt *dtp) +{ + char c; + if (!is_internal_unit (dtp)) + do + c = next_char (dtp); + while (c != '\n'); +} + + /* Skip over a separator. Technically, we don't always eat the whole separator. This is because if we've processed the last input item, then a separator is unnecessary. Plus the fact that operating @@ -328,7 +342,14 @@ eat_separator (st_parameter_dt *dtp) if (dtp->u.p.namelist_mode) { do - c = next_char (dtp); + { + c = next_char (dtp); + if (c == '!') + { + eat_line (dtp); + c = next_char (dtp); + } + } while (c == '\n' || c == '\r' || c == ' '); unget_char (dtp, c); } @@ -407,20 +428,6 @@ finish_separator (st_parameter_dt *dtp) } -/* This function reads characters through to the end of the current line and - just ignores them. */ - -static void -eat_line (st_parameter_dt *dtp) -{ - char c; - if (!is_internal_unit (dtp)) - do - c = next_char (dtp); - while (c != '\n'); -} - - /* This function is needed to catch bad conversions so that namelist can attempt to see if dtp->u.p.saved_string contains a new object name rather than a bad value. */ |