The following program gives a segfault at runtime:
MODULE m ABSTRACT INTERFACE SUBROUTINE sub() END SUBROUTINE sub END INTERFACE CONTAINS SUBROUTINE passf(f) PROCEDURE(sub), POINTER:: f CALL callf(f) END SUBROUTINE passf SUBROUTINE callf(f) PROCEDURE(sub), POINTER :: f PRINT*, 'calling f' CALL f() END SUBROUTINE callf END MODULE m PROGRAM prog USE m PROCEDURE(sub), POINTER :: f f => s CALL passf(f) CONTAINS SUBROUTINE s PRINT*, 'sub' END SUBROUTINE s END PROGRAM prog -fdump-tree-original shows that the problem lies in 'passf': passf (void (*<T63>) (void) * f) { callf (&f); } -- Summary: [F03] procedure pointer as actual argument Product: gcc Version: 4.5.0 Status: UNCONFIRMED Keywords: wrong-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=40450