re PR libfortran/34530 (namelist read broken when whitespace after &namelist)
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. From-SVN: r131099
This commit is contained in:
parent
c7abc45c7f
commit
667e20459d
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
29
gcc/testsuite/gfortran.dg/namelist_44.f90
Normal file
29
gcc/testsuite/gfortran.dg/namelist_44.f90
Normal file
@ -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
|
@ -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
|
||||
|
@ -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. */
|
||||
|
Loading…
Reference in New Issue
Block a user