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

Reply via email to