https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69080
--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> --- The leak seems gone with module dummy_module implicit none ! save type, public :: dummy_class contains procedure, public :: trigger => dummy_trigger end type contains function dummy_create_allocatable() result(result_object) class(dummy_class), allocatable :: result_object allocate(result_object) end function dummy_create_allocatable subroutine dummy_do_nothing(a_dummy) ! class(dummy_class), allocatable, intent(in) :: a_dummy class(dummy_class), allocatable :: a_dummy print *, allocated(a_dummy) if (allocated(a_dummy)) deallocate(a_dummy) end subroutine dummy_do_nothing subroutine dummy_trigger(this) class(dummy_class), intent(inout) :: this call dummy_do_nothing(dummy_create_allocatable()) end subroutine dummy_trigger end module dummy_module program prog use dummy_module implicit none save class(dummy_class), allocatable :: dummy allocate(dummy) call dummy%trigger() deallocate(dummy) end program prog