Split off from PR 52512. The following program runs successfully with GCC 4.1, 4.3 and 4.5, but it fails with GCC 4.6 to GCC 4.9. It also works with Crayftn, PGI and ifort. The problem is the space in "i(3 )=". Strictly speaking, that is invalid but as it worked before, others support it as well, and as ignoring spaces in "name(...)" is nonambiguous, I believe that we should support it. (F2008, "10.11.2 Name-value subsequences", paragraph 2 has: "Each designator may be preceded and followed by one or more optional blanks but shall not contain embedded blanks.") integer :: i(3) namelist /nml/ i i = -42 open(99,status='scratch') write(99,'(a)') '&nml i(3 ) = 5 /' rewind(99) read(99,nml=nml) close(99) write(*,nml=nml) if (i(1)/=-42 .or. i(2)/=-42 .or. i(3)/=5) call abort() end
Author: jvdelisle Date: Sun Mar 31 20:32:33 2013 New Revision: 197290 URL: http://gcc.gnu.org/viewcvs?rev=197290&root=gcc&view=rev Log: 2013-03-31 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/56786 * io/list_read.c (nml_parse_qualifier): Remove spurious next_char call when checking for EOF. Use error return mechanism when EOF detected. Do not return false unless parse_err_msg and parse_err_msg_size have been set. Use hit_eof. (nml_get_obj_data): Likewise use the correct error mechanism. * io/transfer.c (hit_eof): Do not set AFTER_ENDFILE if in namelist mode. Modified: trunk/libgfortran/ChangeLog trunk/libgfortran/io/list_read.c trunk/libgfortran/io/transfer.c
*** Bug 56803 has been marked as a duplicate of this bug. ***
(In reply to comment #2) > *** Bug 56803 has been marked as a duplicate of this bug. *** Author: jvdelisle Date: Sun Mar 31 20:37:19 2013 New Revision: 197291 URL: http://gcc.gnu.org/viewcvs?rev=197291&root=gcc&view=rev Log: 2013-03-31 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/56786 * gfortran.dg/namelist_81.f90: New test. Added: trunk/gcc/testsuite/gfortran.dg/namelist_81.f90 Modified: trunk/gcc/testsuite/ChangeLog
(In reply to comment #2) > *** Bug 56803 has been marked as a duplicate of this bug. *** That bug has the following test case. We should consider adding it as well. In addition, the compiler should report END of file and not an error - hence, libgfortran is not according the standard by failing in the wrong way: implicit none integer :: ii namelist /nml/ ii open(99, status="scratch") write(99,'(a)') "&nml ii=55" rewind(99) read(99, nml=nml, end=77, err=90) print *, ii stop 'OK - vendor extension: successful READ w/o "/"' 77 stop 'OK - END of FILE hit' 90 call abort() ! Wrong end
GCC 4.6.4 has been released and the branch has been closed.
I am in the process of back port to 4.8 along with Tilos patches for 52512 and probably 51825. I will do each separately so we can have a clear record.
Author: jvdelisle Date: Sun Apr 28 13:47:42 2013 New Revision: 198370 URL: http://gcc.gnu.org/viewcvs?rev=198370&root=gcc&view=rev Log: 2013-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org> Backport from mainline: PR libfortran/56786 * io/list_read.c (nml_parse_qualifier): Remove spurious next_char call when checking for EOF. Use error return mechanism when EOF detected. Do not return FAILURE unless parse_err_msg and parse_err_msg_size have been set. Use hit_eof. (nml_get_obj_data): Likewise use the correct error mechanism. * io/transfer.c (hit_eof): Do not set AFTER_ENDFILE if in namelist mode. PR fortran/56786 * gfortran.dg/namelist_81.f90: New test. Added: branches/gcc-4_8-branch/gcc/testsuite/gfortran.dg/namelist_81.f90 Modified: branches/gcc-4_8-branch/gcc/testsuite/ChangeLog branches/gcc-4_8-branch/libgfortran/ChangeLog branches/gcc-4_8-branch/libgfortran/io/list_read.c branches/gcc-4_8-branch/libgfortran/io/transfer.c
Author: jvdelisle Date: Sun Apr 28 17:20:06 2013 New Revision: 198375 URL: http://gcc.gnu.org/viewcvs?rev=198375&root=gcc&view=rev Log: 2013-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org> Backport from mainline: PR libfortran/56786 * io/list_read.c (nml_parse_qualifier): Remove spurious next_char call when checking for EOF. Use error return mechanism when EOF detected. Do not return FAILURE unless parse_err_msg and parse_err_msg_size have been set. Use hit_eof. (nml_get_obj_data): Likewise use the correct error mechanism. * io/transfer.c (hit_eof): Do not set AFTER_ENDFILE if in namelist mode. Backport from trunk: PR fortran/56786 * gfortran.dg/namelist_81.f90: New test. Added: branches/gcc-4_7-branch/gcc/testsuite/gfortran.dg/namelist_81.f90 Modified: branches/gcc-4_7-branch/gcc/testsuite/ChangeLog branches/gcc-4_7-branch/libgfortran/ChangeLog branches/gcc-4_7-branch/libgfortran/io/list_read.c branches/gcc-4_7-branch/libgfortran/io/transfer.c
Fixed on 4.8 and 4.7 Closing