There are some problems with CHARACTER-valued procedure pointers (and procedure pointer components).
First example (with PPCs): module m type :: t procedure(character(len=5)), pointer, nopass :: ptr end type contains function abc() character(len=5) :: abc abc = 'abcde' end function abc end module m use m type(t) :: x character(len=5) :: str x%ptr => abc str = x%ptr() end gives the error: test.f90:12:0: internal compiler error: in gfc_conv_component_ref, at fortran/trans-expr.c:477 Second example (similar, but with simple procedure pointers): procedure(character(len=5)), pointer :: pp pp => abc contains function abc() character(len=5) :: abc abc = 'abcde' end function abc end gives: internal compiler error: in gfc_trans_pointer_assignment, at fortran/trans-expr.c:4237 -- Summary: [F03] Procedure Pointers with CHARACTER results 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: janus at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41106