https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94361

            Bug ID: 94361
           Summary: Memory leak in nested types with final
           Product: gcc
           Version: 9.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: antony at cosmologist dot info
  Target Milestone: ---

The code below leaks memory (mem grows with each loop interation), but does not
if the "FINAL" is commented. The issue is also present in trunk (10.0.1
20200218), and may be a reduced test case for
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94109 (in which case the problem
was introduced around 8.3.1, but I have not tested versions extensively).


    module debug
    private

    Type TypeWithFinal
    contains
    FINAL :: finalizer  !No leak if this line is commented
    end type

    Type Tester
        real, dimension(:), allocatable :: Dat
        Type(TypeWithFinal) :: X
    end Type

    Type :: TestType2
        Type(Tester) :: T
    end type TestType2
    public Leaker
    contains

    subroutine Leaker
    type(TestType2) :: Test

    allocate(Test%T%Dat(100000000))
    end subroutine

    subroutine finalizer(this)
    Type(TypeWithFinal) :: this
    end subroutine finalizer

    end module


    program run
    use debug
    implicit none
    integer i

    do i=1, 10000
        call Leaker()
        call sleep(1)
    end do

    end program

Reply via email to