When compiling the following code with current gfortan, the resulting executable produces the following output:
number, derived = 2 number, simple = 1 number, simple = ***** The (IMO) correct output would be number, derived = 2 number, simple = 1 number, simple = 1 which is produced by most other compilers I tried. Only Intel ifc 8.0 and 8.1 produce the same output as gfortran. module simpleObj implicit none type objA private integer :: i end type objA interface new module procedure oaInit end interface interface print module procedure oaPrint end interface private public objA,new,print contains subroutine oaInit(oa,i) integer :: i type(objA) :: oa oa%i=i end subroutine oaInit subroutine oaPrint(oa) type(objA) :: oa print '("number, simple = ",i5)', oa%i end subroutine oaPrint end module simpleObj ! ----------------------------------------------------------------- module derivedObj use simpleObj implicit none type objB private integer :: i type(objA), pointer :: oa end type objB interface new module procedure obInit end interface interface print module procedure obPrint end interface private public objB,new,print,getOa contains subroutine obInit(ob,oa,i) integer :: i type(objA), target :: oa type(objB) :: ob ob%i=i ob%oa=>oa end subroutine obInit subroutine obPrint(ob) type(objB) :: ob print '("number, derived = ",i5)', ob%i call print(ob%oa) end subroutine obPrint function getOa(ob) result(oa) type(objB),target :: ob type(objA), pointer :: oa oa=>ob%oa end function getOa end module derivedObj ! ----------------------------------------------------------------- program test use simpleObj use derivedObj implicit none type(objA),target :: oa type(objB),target :: ob call new(oa,1) call new(ob,oa,2) call print(ob) call print(getOa(ob)) end program test ~/tmp>gfortran -v test.f90 Driving: gfortran -v test.f90 -lgfortranbegin -lgfortran -lm -shared-libgcc Using built-in specs. Configured with: /scratch/gcc/configure --quiet --prefix=/afs/mpa/data/martin/ugcc --enable-languages=c++,f95 --with-gmp=/afs/mpa/data/martin/mygmp Thread model: posix gcc version 4.0.0 20050120 (experimental) /afs/mpa/data/martin/ugcc/libexec/gcc/i686-pc-linux-gnu/4.0.0/f951 test.f90 -quiet -dumpbase test.f90 -mtune=pentiumpro -auxbase test -version -o /tmp/ccZa4zwg.s GNU F95 version 4.0.0 20050120 (experimental) (i686-pc-linux-gnu) compiled by GNU C version 4.0.0 20050120 (experimental). GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096 as -V -Qy -o /tmp/cc0LLrQq.o /tmp/ccZa4zwg.s GNU assembler version 2.14 (i686-pc-linux-gnu) using BFD version 2.14 20030612 /afs/mpa/data/martin/ugcc/libexec/gcc/i686-pc-linux-gnu/4.0.0/collect2 --eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /afs/mpa/data/martin/ugcc/lib/gcc/i686-pc-linux-gnu/4.0.0/crtbegin.o -L/afs/mpa/data/martin/ugcc/lib/gcc/i686-pc-linux-gnu/4.0.0 -L/afs/mpa/data/martin/ugcc/lib/gcc/i686-pc-linux-gnu/4.0.0/../../.. /tmp/cc0LLrQq.o -lgfortranbegin -lgfortran -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /afs/mpa/data/martin/ugcc/lib/gcc/i686-pc-linux-gnu/4.0.0/crtend.o /usr/lib/crtn.o ~/tmp>./a.out number, derived = 2 number, simple = 1 number, simple = ***** -- Summary: [gfortran] wrong code generation for pointers to derived types Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: martin at mpa-garching dot mpg dot de CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19561