This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gfortran] patch for pr 17286


namelist read was not working when there are spaces between the
equal and the data.

the below patch fixes this.


tested i686/gnu/linux with no additional failures.


2004-09-20  Bud Davis  <bdavis9659@comcast.net>

	PR fortran/17286
	* io/list_read.c (namelist_read): ignore spaces after
	the '=' for namelist reads.


--bud 



! pr17286
! namelist read fails when spaces exist between the '=' and the numbers
! this is a libgfortran bug
! derived from testcase provided by Paul Thomas <paulthomas2@wanadoo.fr


       program bug3
       integer num1 , num2 , num3 , num4 
       data num3  / 42 /
       data num4  / 56 /
       namelist /mynml1/ num1,num2
       namelist /mynml2/ num3,num4
       logical dbg
       data dbg / .TRUE. /
       open(unit=10,status='SCRATCH')
       write(10,'(A)') "&mynml1,num1=16,num2=32,&end"
!
! write mynml2
!
       write(10,mynml2)
       rewind(10)
!
! now read back
!
       num1 = -1
       num2 = -1
       read(10,mynml1)
       if (num1.eq.16.and.num2.eq.32) then
          if (dbg) write(*,mynml1)
       else
          if (dbg) print *, 'expected 16 32 got ',num1,num2
          call abort
       endif
       num3 = -1
       num4 = -1
       read(10,mynml2)
       if (num3.eq.42.and.num4.eq.56) then
          if (dbg) write(*,mynml2)
       else
          if (dbg) print *, 'expected 42 56 got ',num3,num4
          call abort
       endif

       close(10)
       end




Index: gcc/libgfortran/io/list_read.c
===================================================================
RCS file: /cvs/gcc/gcc/libgfortran/io/list_read.c,v
retrieving revision 1.9
diff -c -3 -p -r1.9 list_read.c
*** gcc/libgfortran/io/list_read.c	14 Sep 2004 00:56:44 -0000	1.9
--- gcc/libgfortran/io/list_read.c	21 Sep 2004 02:46:20 -0000
*************** restart:
*** 1496,1501 ****
--- 1496,1505 ----
  
            len = nl->len;
            p = nl->mem_pos;
+ 
+           /* skip any blanks or tabs after the = */
+           eat_spaces ();
+  
            switch (nl->type)
              {
              case BT_INTEGER:



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]