Reported by Charlie Sharpsteen at http://gcc.gnu.org/ml/fortran/2009-07/msg00010.html
The program runs with NAG f95 5.1 and prints twice: 1.0000000000000000 1.0000000000000000 1.0000000000000000 1.0000000000000000 With gfortran: aaa.f90: In function 'bugtest': aaa.f90:30:0: internal compiler error: Segmentation fault valgrind shows: ==17749== Invalid read of size 1 ==17749== at 0x56D412: gfc_return_by_reference (trans-types.c:2089) ==17749== by 0x550D88: gfc_trans_assignment (trans-expr.c:4412) which is: 2087 gfc_return_by_reference (gfc_symbol * sym) 2088 { 2089 if (!sym->attr.function) 2090 return 0; ! Testcase by Charlie Sharpsteen module bugTestMod implicit none type:: boundTest contains procedure, nopass:: test => returnMat end type boundTest contains function returnMat( a, b ) result( mat ) integer:: a, b double precision, dimension(a,b):: mat mat = 1d0 end function returnMat end module bugTestMod program bugTest use bugTestMod implicit none double precision, dimension(2,2):: testCatch type( boundTest ):: testObj write(*,*)testObj%test(2,2) ! <<<< OK (at run time) testCatch = testObj%test(2,2)! <<<< ICE write(*,*)testCatch end program bugTest -- Summary: ICE assigning array return value from type-bound procedure Product: gcc Version: 4.5.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: burnus at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40646