Bug 17285 - [4.0 only] namelist write does not terminate with &end
Summary: [4.0 only] namelist write does not terminate with &end
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: libfortran (show other bugs)
Version: 4.0.0
: P2 normal
Target Milestone: 4.0.1
Assignee: Not yet assigned to anyone
URL:
Keywords: patch
Depends on:
Blocks: 19292
  Show dependency treegraph
 
Reported: 2004-09-02 13:15 UTC by Paul Thomas
Modified: 2005-04-23 16:12 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2005-04-18 07:46:32


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Paul Thomas 2004-09-02 13:15:23 UTC
An important use of namelist is to safeguard data using a concise statement, so 
that it can be read back later.  Thus it is essential that a namelist WRITE 
produces output that can be correctly readback by a namelist READ.  This is not 
the case for gfortran, at present.  It fails to write the requisite &end

$ cat bug2.f90;/irun/bin/gfortran -v bug2.f90 ; ./a.exe
program bug2
  integer, dimension(10) :: number =42
  namelist /mynml/ number
  open(unit=10,file='bug2.txt',status='unknown')
!
! write in acceptable format
!
  write(10,'(A)') "&mynml,number=42,&end"
!
! write the namelist itself
!
  write(10,mynml)
!!!  write(10,'(A)') "&end"   !!!! runs with this addition
!
! write again in acceptable format
!
  write(10,'(A)') "&mynml,number=42,&end"
  close(10)
!
! now read all 3 back
!
  open(unit=10,file='bug2.txt',status='old')
  read(10,mynml)
  print *, "1st READ is OK"
  write(*,mynml)
  read(10,mynml)
  print *, "2nd READ is OK"
  write(*,mynml)
  read(10,mynml)
  print *, "3rd READ is OK"
  write(*,mynml)
  close(10)
end program bug2
Driving: /irun/bin/gfortran -v bug2.f90 -lgfortranbegin -lgfortran
Reading specs from /irun/lib/gcc/i686-pc-cygwin/3.5.0/specs
Configured with: ../gcc-3.5-20040815/configure --with-gmp=/gmp --with-mpfr=/gmp
--prefix=/irun --enable-languages=c,c++,f95
Thread model: single
gcc version 3.5.0 20040815 (experimental)
 /irun/libexec/gcc/i686-pc-cygwin/3.5.0/f951.exe bug2.f90 -quiet -dumpbase bug2.
f90 -mtune=pentiumpro -auxbase bug2 -version -o /cygdrive/c/DOCUME~1/THOMASP/LOC
ALS~1/Temp/ccmHx843.s
GNU F95 version 3.5.0 20040815 (experimental) (i686-pc-cygwin)
        compiled by GNU C version 3.5.0 20040719 (experimental).
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
 as -o /cygdrive/c/DOCUME~1/THOMASP/LOCALS~1/Temp/ccMLSMd2.o /cygdrive/c/DOCUME~
1/THOMASP/LOCALS~1/Temp/ccmHx843.s
 /irun/libexec/gcc/i686-pc-cygwin/3.5.0/collect2.exe -Bdynamic --dll-search-pref
ix=cyg /lib/crt0.o -L/irun/lib/gcc/i686-pc-cygwin/3.5.0 -L/irun/lib/gcc/i686-pc-
cygwin/3.5.0/../../.. /cygdrive/c/DOCUME~1/THOMASP/LOCALS~1/Temp/ccMLSMd2.o -lgf
ortranbegin -lgfortran -lgcc -lcygwin -luser32 -lkernel32 -ladvapi32 -lshell32 -
lgcc
 1st READ is OK
&mynml
number=         42,/
 2nd READ is OK
&mynml
number=         42,/
At line 29 of file bug2.f90
Fortran runtime error: End of file
Comment 1 Toon Moene 2004-09-08 18:53:20 UTC
Confirmed on powerpc-unknown-linux-gnu, using gcc-3.5-20040907.
Comment 2 Francois-Xavier Coudert 2005-04-18 07:46:32 UTC
This one is fixed by the recent namelist patch, will be fixed on 4.0 when it's
reopened.
Comment 3 Paul Thomas 2005-04-23 16:12:33 UTC
The namelist modifications implemented over the last week have resulted in 
namelist io that is compliant with the standard and this bug is fixed, as of 
GCC 4.1.0 20050423.
Comment 4 CVS Commits 2005-06-05 23:34:23 UTC
Subject: Bug 17285

CVSROOT:	/cvs/gcc
Module name:	gcc
Branch: 	gcc-4_0-branch
Changes by:	tobi@gcc.gnu.org	2005-06-05 23:33:52

Modified files:
	gcc/fortran    : ChangeLog gfortran.texi trans-io.c 
	gcc/testsuite  : ChangeLog 
	gcc/testsuite/gfortran.dg: namelist_1.f90 
	libgfortran    : ChangeLog 
	libgfortran/io : io.h list_read.c lock.c transfer.c write.c 
Added files:
	gcc/testsuite/gfortran.dg: namelist_11.f namelist_12.f 
	                           namelist_13.f90 namelist_14.f90 
	                           namelist_15.f90 namelist_16.f90 
	                           namelist_17.f90 namelist_18.f90 
	                           namelist_19.f90 namelist_2.f90 
	                           namelist_20.f90 namelist_3.f90 
	                           pr12884.f pr17285.f90 pr17472.f 
	                           pr18122.f90 pr18210.f90 pr18392.f90 
	                           pr19467.f90 pr19657.f 

Log message:
	gcc/fortran/
	2005-06-05  Jakub Jelinek  <jakub@redhat.com>
	
	Backport from the mainline:
	2005-04-17 Paul Thomas <pault@gcc.gnu.org>
	
	PR fortran/17472
	PR fortran/18209
	PR fortran/18396
	PR fortran/19467
	PR fortran/19657
	* fortran/trans-io.c (gfc_build_io_library_fndecls): Create
	declaration for	st_set_nml_var and st_set_nml_var_dim. Remove
	declarations of old namelist functions.
	(build_dt): Simplified call to transfer_namelist_element.
	(nml_get_addr_expr): Generates address expression for start of
	object data. New function.
	(nml_full_name): Qualified name for derived type components. New
	function.
	(transfer_namelist_element): Modified for calls to new functions
	and improved derived type handling.
	
	libgfortran/
	2005-06-05  Jakub Jelinek  <jakub@redhat.com>
	
	Backport from the mainline:
	2005-04-18 Paul Thomas <pault@gcc.gnu.org>
	Jerry DeLisle <jvdelisle@verizon.net>
	
	* io/write.c (nml_write_obj): Provide 1 more byte for ext_name.
	* io/list_read.c (nml_get_obj_data): Put extra brackets in get_mem
	call for ext_name.  These fix the bug reported by Jerry DeLisle to
	the fortran list and are based on his suggested fix.
	
	2005-04-18 Paul Thomas <pault@gcc.gnu.org>
	
	* io/list_read.c (nml_touch_nodes, nml_read_obj,
	nml_get_obj_data): Fix memory leaks in code for derived types.
	
	2005-04-17 Paul Thomas <pault@gcc.gnu.org>
	
	* io/list_read.c (eat_separator): at_eol = 1 replaced
	(zapped at some time?).
	
	2005-04-17 Paul Thomas <pault@gcc.gnu.org>
	
	PR libgfortran/12884
	PR libgfortran/17285
	PR libgfortran/18122
	PR libgfortran/18210
	PR libgfortran/18392
	PR libgfortran/18591
	PR libgfortran/18879
	* io/io.h (nml_ls): Declare.
	(namelist_info): Modify for arrays.
	* io/list_read.c (namelist_read): Reduced to call to new functions.
	(match_namelist_name): Simplified.
	(nml_query): Handles stdin queries ? and =?. New function.
	(nml_get_obj_data): Parses object name. New function.
	(touch_nml_nodes): Marks objects for read. New function.
	(untouch_nml_nodes): Resets objects. New function.
	(parse_qualifier): Parses and checks qualifiers. New function
	(nml_read_object): Reads and stores object data. New function.
	(eat_separator): No new_record on '/' in namelist.
	(finish_separator): No new_record on '/' in namelist.
	(read_logical): Error return for namelist.
	(read_integer): Error return for namelist.
	(read_complex): Error return for namelist.
	(read_real): Error return for namelist.
	* io/lock.c (library_end): Free extended namelist_info types.
	* io/transfer.c (st_set_nml_var): Modified for arrays.
	(st_set_nml_var_dim): Dimension descriptors. New function.
	* io/write.c (namelist_write): Reduced to call to new functions.
	(nml_write_obj): Writes output for object. New function.
	(write_integer): Suppress leading blanks for repeat counts.
	(write_int): Suppress leading blanks for repeat counts.
	(write_float): Suppress leading blanks for repeat counts.
	(output_float): Suppress leading blanks for repeat counts.
	
	gcc/testsuite/
	2005-06-05  Jakub Jelinek  <jakub@redhat.com>
	
	Backport from the mainline:
	2005-04-17 Paul Thomas <pault@gcc.gnu.org>
	
	PR fortran/17472
	PR fortran/18209
	PR fortran/18396
	PR fortran/19467
	PR fortran/19657
	* fortran/trans-io.c (gfc_build_io_library_fndecls): Create
	declaration for	st_set_nml_var and st_set_nml_var_dim. Remove
	declarations of old namelist functions.
	(build_dt): Simplified call to transfer_namelist_element.
	(nml_get_addr_expr): Generates address expression for start of
	object data. New function.
	(nml_full_name): Qualified name for derived type components. New
	function.
	(transfer_namelist_element): Modified for calls to new functions
	and improved derived type handling.
	
	PR libfortran/12884 gfortran.dg/pr12884.f: New test
	PR libfortran/17285 gfortran.dg/pr17285.f90: New test
	PR libfortran/17472, 18396, 18209 gfortran.dg/pr17472.f: New test
	PR libfortran/18122, 18591 gfortran.dg/pr18122.f90: New test
	PR libfortran/18210 gfortran.dg/pr18210.f90: New test
	PR libfortran/18392 gfortran.dg/pr18392.f90: New test
	PR libfortran/19467 gfortran.dg/pr19467.f90: New test
	PR libfortran/19657 gfortran.dg/pr19657.f90: New test
	* gfortran.dg/namelist_1.f90: Correct comment (PUBLIC and PRIVATE wrong way round).
	* gfortran.dg/namelist_2.f90: Variables with INTENT(IN) cannot be in namelists. New test
	* gfortran.dg/namelist_3.f90: Pointers cannot be in namelists. New test
	* gfortran.dg/namelist_11.f: Tests reals and qualifiers in namelist. New test
	* gfortran.dg/namelist_12.f: Tests integers and qualifiers in namelist. New test
	* gfortran.dg/namelist_13.f90: Tests derived types in namelist. New test
	* gfortran.dg/namelist_14.f90: Tests trans-io.c namelist support. New test
	* gfortran.dg/namelist_15.f90: Tests arrays of derived types in namelist. New test
	* gfortran.dg/namelist_16.f90: Tests complex in namelist. New test
	* gfortran.dg/namelist_17.f90: Tests logical in namelist. New test
	* gfortran.dg/namelist_18.f90: Tests charcter delimiters in namelist. New test
	* gfortran.dg/namelist_19.f90: Tests namelist errors. New test
	* gfortran.dg/namelist_20.f90: Tests negative bounds for explicit arrays. New test

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.335.2.70&r2=1.335.2.71
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/gfortran.texi.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.10.8.2&r2=1.10.8.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/fortran/trans-io.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.33.2.2&r2=1.33.2.3
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.5084.2.233&r2=1.5084.2.234
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_11.f.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_12.f.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_13.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_14.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_15.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_16.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_17.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_18.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_19.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_2.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_20.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_3.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/pr12884.f.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/pr17285.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/pr17472.f.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/pr18122.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/pr18210.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/pr18392.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/pr19467.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/pr19657.f.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.6.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gfortran.dg/namelist_1.f90.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.1&r2=1.1.18.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.163.2.47&r2=1.163.2.48
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/io/io.h.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.16.10.1&r2=1.16.10.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/io/list_read.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.14.2.1&r2=1.14.2.2
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/io/lock.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.5&r2=1.5.12.1
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/io/transfer.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.32.2.4&r2=1.32.2.5
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/libgfortran/io/write.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.23.2.7&r2=1.23.2.8