https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60550
--- Comment #4 from Dominique d'Humieres <dominiq at lps dot ens.fr> --- Reduced test (ICE with r208775) ! { dg-do compile } MODULE m_benchmark_function IMPLICIT NONE INTEGER, PARAMETER :: wpr = 8 TYPE, ABSTRACT :: problem INTEGER, PUBLIC :: problem_dimension=0, problemID=0, fevals=0 END TYPE problem TYPE, EXTENDS(problem) :: benchmark_function REAL(wpr), DIMENSION(:), ALLOCATABLE :: translation CONTAINS FINAL :: bmf_dtor END TYPE benchmark_function CONTAINS SUBROUTINE bmf_dtor(self) TYPE(benchmark_function), INTENT(INOUT) :: self END SUBROUTINE bmf_dtor END MODULE m_benchmark_function MODULE m_rosenbrock USE m_benchmark_function, ONLY : benchmark_function IMPLICIT NONE TYPE, EXTENDS(benchmark_function) :: rosenbrock END TYPE rosenbrock INTERFACE rosenbrock MODULE PROCEDURE rosen_ctor_def END INTERFACE rosenbrock CONTAINS FUNCTION rosen_ctor_def(id, dim, name) RESULT(self) INTEGER, INTENT(IN) :: id, dim CHARACTER(LEN=*), INTENT(IN) :: name TYPE(rosenbrock) :: self END FUNCTION rosen_ctor_def END MODULE m_rosenbrock MODULE m_problem_factory USE m_benchmark_function, ONLY : problem, benchmark_function USE m_rosenbrock, ONLY : frosenbrock => rosenbrock IMPLICIT NONE TYPE :: problem_factory INTEGER :: problemID = 0 CHARACTER(LEN=:), ALLOCATABLE :: problemName CLASS(problem), POINTER :: problemPtr => NULL() CONTAINS PROCEDURE :: create => create_problem END TYPE problem_factory CONTAINS FUNCTION create_problem(self, ndim) RESULT(ptr) CLASS(problem_factory) :: self INTEGER, INTENT(IN) :: ndim CLASS(problem), POINTER :: ptr ALLOCATE(self%problemPtr, SOURCE=FRosenbrock(self%problemID, ndim, self%problemName)) END FUNCTION create_problem END MODULE m_problem_factory