[Bug fortran/55117] Programs fails to read namelist (contains derived types objects)

tilo@tilo-schwarz.de gcc-bugzilla@gcc.gnu.org
Fri Feb 22 20:58:00 GMT 2013


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

Tilo Schwarz <tilo@tilo-schwarz.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |tilo@tilo-schwarz.de

--- Comment #11 from Tilo Schwarz <tilo@tilo-schwarz.de> 2013-02-22 20:57:50 UTC ---
Hi,

I ran into this today and tried to produce a small test case from my big
namelist problem.


program namelist

type d1
    integer :: j = 0
end type d1

type d2
    type(d1) k
end type d2

type d3
    type(d2) d(2)
end type d3

type(d3) der
namelist /nmlst/ der

read (*, nml = nmlst)
print nmlst

end program namelist


Running above program on all two line combinations of the namelist gives
different errors using
4.7.2 and
gcc version 4.8.0 20130222 (experimental) (GCC)
(Details below).


Observations:

- If type d3 uses 'type(d1) d(2)' instead of 'type(d2) d(2)', the problem goes
away.
- If the trailing %J is removed in the namelist, the problem goes away.
- If two separate members are used instead of the array 'type(d2) d(2)', the
problem goes away.


Details of namelist variations:

% cat namelist.txt; echo -------; prg_namelist_bug < namelist.txt
&NMLST
 /
-------
&NMLST
 DER%D(1)%K%J=          0,
 DER%D(2)%K%J=          0,
 /


% cat namelist.txt; echo -------; prg_namelist_bug < namelist.txt
&NMLST
 DER%D(1)%K%J = 1,
 /
-------
&NMLST
 DER%D(1)%K%J=          1,
 DER%D(2)%K%J=          0,
 /


% cat namelist.txt; echo -------; prg_namelist_bug < namelist.txt
&NMLST
 DER%D(2)%K%J = 2,
 /
-------
&NMLST
 DER%D(1)%K%J=          2,
 DER%D(2)%K%J=          0,
 /


% cat namelist.txt; echo -------; prg_namelist_bug < namelist.txt
&NMLST
 DER%D(1)%K%J = 1,
 DER%D(2)%K%J = 2,
 /
-------
&NMLST
 DER%D(1)%K%J=          2,
 DER%D(2)%K%J=          0,
 /


% cat namelist.txt; echo -------; prg_namelist_bug < namelist.txt
&NMLST
 DER%D(2)%K%J = 2,
 DER%D(1)%K%J = 1,
 /
-------
&NMLST
 DER%D(1)%K%J=          1,
 DER%D(2)%K%J=          0,
 /


If the last component %J is removed in the namelist,
the problem goes away:

% cat namelist.txt; echo -------; prg_namelist_bug < namelist.txt
&NMLST
 DER%D(1)%K = 1,
 /
-------
&NMLST
 DER%D(1)%K%J=          1,
 DER%D(2)%K%J=          0,
 /


% cat namelist.txt; echo -------; prg_namelist_bug < namelist.txt
&NMLST
 DER%D(2)%K = 2,
 /
-------
&NMLST
 DER%D(1)%K%J=          0,
 DER%D(2)%K%J=          2,
 /


% cat namelist.txt; echo -------; prg_namelist_bug < namelist.txt
&NMLST
 DER%D(1)%K = 1,
 DER%D(2)%K = 2,
 /
-------
&NMLST
 DER%D(1)%K%J=          1,
 DER%D(2)%K%J=          2,
 /


% cat namelist.txt; echo -------; prg_namelist_bug < namelist.txt
&NMLST
 DER%D(2)%K = 2,
 DER%D(1)%K = 1,
 /
-------
&NMLST
 DER%D(1)%K%J=          1,
 DER%D(2)%K%J=          2,
 /


Regards,
Tilo



More information about the Gcc-bugs mailing list