! { dg-do compile }
! PR fortran/33646
!
!

module BAR_MODULE
   implicit none
   private
   public    create_
   interface create_
      module procedure create
   end interface
   type system_type
       integer(kind=kind(1)) :: max_memory_used
   end type

contains

   subroutine create(self)
    type(system_type) :: self
      pointer :: self
      allocate(self)
   end subroutine

end

module FOO_MODULE
   use BAR_MODULE
   implicit none
   private
   public    create_
   interface create_
      module procedure create
   end interface

   public    create_copy_
   interface create_copy_
      module procedure create_copy
   end interface
contains

   subroutine create(self)
    character(*) :: self
      pointer :: self
      nullify(self)
      allocate(self)

      self = " "
   end subroutine

   subroutine create_copy(self,s)
    character(*) :: self
      pointer :: self
      character(*) :: s
      call create_(self)
   end subroutine
end
