https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71796
--- Comment #3 from Ian Harvey <ian_harvey at bigpond dot com> --- If you want a test case that exhibits no run time error upon successful compilation and linking, then replace the entire main program with an END statement. MODULE ma IMPLICIT NONE PRIVATE TYPE, PUBLIC, ABSTRACT :: ta END TYPE ta END MODULE ma MODULE mb IMPLICIT NONE PRIVATE TYPE, PUBLIC, ABSTRACT :: tb CONTAINS PROCEDURE(b_binding), DEFERRED :: binding END TYPE tb ABSTRACT INTERFACE SUBROUTINE b_binding(argb, arga) USE ma IMPORT :: tb IMPLICIT NONE CLASS(tb), INTENT(IN) :: argb CLASS(ta), INTENT(OUT), ALLOCATABLE :: arga END SUBROUTINE b_binding END INTERFACE END MODULE mb MODULE mc IMPLICIT NONE PRIVATE PUBLIC :: subc CONTAINS SUBROUTINE subc USE mb !<< Ordering of these statements is significant. USE ma !<< Ordering of these statements is significant. CLASS(ta), ALLOCATABLE :: a CLASS(tb), ALLOCATABLE :: b !**** CALL b%binding(a) END SUBROUTINE subc END MODULE mc END ! <<<<