This has probably already been submitted by Daniel Franke or Jerry DeLisle.
I am just trying to see if I can work this system.


             FORTRAN NAMELIST Run Time Problem

     The FORTRAN statement

         READ(5, nml=CODE)

should read through the input file (connected to device number 5)
until it finds a namelist with the name 'CODE', and then read/process
that one namelist.  On the next call to this read statement, the
program should read further into the input file to find the next
occurrence of the name 'CODE'.

     This was the behaviour from the IBM and HP FORTRAN 77 compilers.
It is also the behaviour from the open source g77 compiler.  A namelist
with name 'CODEone', 'CODEtwo', or 'CODEx' is treated as having a
different name, on the basis that the name ends at the trailing
'space' delimiter.

     A gfortran compiled program appears to read these names and
conclude that since the first four letters match the requested name
'CODE', it has found the requested namelist.  The program then treats
the remaining letters in the name as a variable name and complains
that 'one' and 'two' are not defined variables for this namelist.
In the case of reading the name 'CODEx', the gfortran program treats
the x as a variable name that it recognizes as a valid variable, but
complains that it is not followed by an equal sign.

     It appears that the compiled program needs to read the whole
namelist name (up to the delimiting space) and then ask if this name
matches the request in the READ statement.

     I include a short FORTRAN program 'namelist.f' that illustrates
the problem when used with the supplied input file 'namelist.in' .
The annotated output file 'namelist.out' gives the output (with errors)
I found using gfortran and g77 compilers.  The problem occurs using

       gcc-gfortran - 4.1.2-13.fc6.x86_64
       libgfortran - 4.1.2-13.fc6.x86_64
running under Linux (Red Hat Fedora Core 6) and

       gcc-gfortran - 4.1.2-12.i386
       libgfortran - 4.1.2-12.i386
running under Linux (Red Hat Fedora Core 7).

Victor J. Slabinski

C********1*********2*********3*********4*********5*********6*********7**
C  Test of namelist operation in Linux gfortran compiled program:
C  Does the "namelist read" skip over namelists with other names or
C  similar names?                                             namelist.f
      PROGRAM namelist
      CHARACTER*25 CHAR
      NAMELIST /CODE/ CHAR, X
      NAMELIST /CODEtwo/ X
C
      OPEN(5, file='namelist.in')
  100 CHAR = 'Initialize string ***'
      X    = -777.
      READ(5, nml=CODE, END=999)
      WRITE(6,*) CHAR, X
      GO TO 100
  999 Itest = 95
      write(6,*) 'Itest=',Itest
      call exit(Itest)
      STOP 'namelist'
      END PROGRAM namelist

****************************************************************
   File namelist.in with test NAMELIST inputs
 &CODVJS  char='VJS-Not a proper nml name', X=-0.5/
 &CODEone char='CODEone input', X=-1.0 /
 &CODEtwo char='CODEtwo inputs', X=-2.0/
 &code    char='Improper lower case name',X=-3.0/
 &CODE    char='Desired namelist sel', X=44./
 &CODEx   char='Should not read CODEx nml', X=-5./
 $CODE    char='Second desired nml', X=66.0 /
 $CODE    X=77.0, char='Reordered desired nml'/

**********************************************************************
Program output from NAMELIST reads with added, interpretive comments;
call on FORTRAN compiler also listed.                     namelist.out

**************************************
FORTRAN compiler call:
 gfortran  namelist.f  -o namelist


Output from executing program 'namelist':


Cannot match namelist object name one  !variable name 'one' is actually
                                        part of nml name CODEone
 CODEone input              -1.000000  !output for namelist read that
                                        should not have occurred

Cannot match namelist object name two  !variable name 'two' is actually
                                        part of nml name CODEtwo
 CODEtwo inputs             -2.000000  !output for namelist read that
                                        should not have occurred

 Improper lower case name   -3.000000  !shows that nml name upper/lower
                                        case does not matter
 Desired namelist sel        44.00000

Equal sign must follow namelist object name x  !variable name 'x' is
                                                actually part of nml
                                                name CODEx
Cannot match namelist object name har          !words in nml string
namelist read: missplaced = sign               !variable are now
Cannot match namelist object name should       !treated as variable
Cannot match namelist object name not          !names
Cannot match namelist object name read
Cannot match namelist object name codex
Cannot match namelist object name nml',
 Initialize string ***      -5.000000  !output for namelist read that
                                        should not have occurred; note
                                        that string variable 'char' never
                                        changed value after initialization
 Second desired nml          66.00000  !Note that input used '$' here, not
 Reordered desired nml       77.00000  !standard '&', in front of nml name
STOP namelist

**************************************
FORTRAN compiler call:
 g77       namelist.f  -o namelist77

Output from executing program 'namelist77' SHOWS CORRECT OPERATION HERE:
[Note that "Skipping namelist" warning messages are not really necessary.]

Skipping namelist "CODVJS": seeking namelist "CODE".
Skipping namelist "CODEONE": seeking namelist "CODE".
Skipping namelist "CODETWO": seeking namelist "CODE".
 Improper lower case name  -3.
 Desired namelist sel       44.
Skipping namelist "CODEX": seeking namelist "CODE".

EOF


-- 
           Summary: Read NAMELIST:  reads wrong namelist name
           Product: gcc
           Version: 4.1.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: slabinski dot victor at usno dot navy dot mil


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33039

Reply via email to