http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55117
kargl at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |kargl at gcc dot gnu.org --- Comment #7 from kargl at gcc dot gnu.org 2013-01-04 16:58:36 UTC --- (In reply to comment #6) > Another manifestation of this problem is with type extension. Here is another > small example which fails. (Tested on v4.6.3 and also a 1/4/2013 snapshot of > the 4.8 trunk.): > > program test_type_extension > > type t1_t > real :: x > end type t1_t > > type, extends(t1_t) :: t1e_t > character(8) :: string > end type t1e_t > > type(t1e_t) :: t1e > > integer :: answer > namelist /test_NML/ t1e, answer > > open(unit=1,file='test1.inp') > read(1,NML=test_NML) > > write(*,*) t1e%x, t1e%string, answer > > end program test_type_extension > > File test1.inp contains: > > &test_NML > t1e%x = 2.,t1e%string='gfortran',answer=42 > / > > wws@w6ws-4:~/fortran/xxx$ gfortran namelist.f90 > wws@w6ws-4:~/fortran/xxx$ a.out > At line 17 of file namelist.f90 (unit = 1, file = 'test1.inp') > Fortran runtime error: Cannot match namelist object name %x If one modifies your code to have gfortran create the file with the namelist, it can then read it back. Here's what I have program test_type_extension type t1_t real :: x end type t1_t type, extends(t1_t) :: t1e_t character(8) :: string end type t1e_t type(t1e_t) :: t1e integer :: answer namelist /test_NML/ t1e, answer t1e%x = 2. t1e%string='gfortran' answer=42 open(unit=2,file='test2.inp') write(2,NML=test_NML) close(2) t1e%x = 0 t1e%string='' answer=0 open(unit=2,file='test2.inp') read(2,NML=test_NML) close(2) write(*,*) t1e%x, t1e%string, answer open(unit=1,file='test1.inp') read(1,NML=test_NML) write(*,*) t1e%x, t1e%string, answer end program test_type_extension % gfc4x -o z foo.f90 && ./z 2.00000000 gfortran 42 At line 36 of file foo.f90 (unit = 1, file = 'test1.inp') Fortran runtime error: Cannot match namelist object name %x % cat test2.inp &TEST_NML T1E%T1_T%X= 2.00000000 , T1E%STRING="gfortran", ANSWER= 42, / It appears that gfortran's handling of an extended derived type in its namelist code is incorrect.