1! { dg-do compile }
2!
3! PR fortran/57364
4!
5! Contributed by Damian Rouson
6!
7module ref_counter_implementation
8  type ref_counter
9  contains
10    procedure :: assign
11    generic :: assignment(=) => assign
12  end type
13contains
14  subroutine assign (lhs, rhs)
15    class (ref_counter), intent(inout) :: lhs
16    class (ref_counter), intent(in) :: rhs
17  end subroutine
18end module
19module foo_parent_implementation
20  use ref_counter_implementation ,only: ref_counter
21  type :: foo_parent
22    type(ref_counter) :: counter
23  end type
24contains
25  type(foo_parent) function new_foo_parent()
26  end function
27end module
28module foo_implementation
29  use foo_parent_implementation ,only: foo_parent,new_foo_parent
30  type, extends(foo_parent) :: foo
31  end type
32contains
33  type(foo) function new_foo()
34    new_foo%foo_parent = new_foo_parent()
35 end function
36end module
37