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

Reply via email to