public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/94361] New: Memory leak in nested types with final
@ 2020-03-27 16:46 antony at cosmologist dot info
  2020-05-18 19:11 ` [Bug fortran/94361] " anlauf at gcc dot gnu.org
                   ` (11 more replies)
  0 siblings, 12 replies; 13+ messages in thread
From: antony at cosmologist dot info @ 2020-03-27 16:46 UTC (permalink / raw)
  To: gcc-bugs

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

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
@ 2020-05-18 19:11 ` anlauf at gcc dot gnu.org
  2020-05-18 19:12 ` anlauf at gcc dot gnu.org
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: anlauf at gcc dot gnu.org @ 2020-05-18 19:11 UTC (permalink / raw)
  To: gcc-bugs

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

anlauf at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to fail|                            |10.1.1, 11.0, 7.4.1, 8.2.1,
                   |                            |8.3.1, 9.3.1
            Summary|Regression: Memory leak in  |Memory leak in nested types
                   |nested types with final     |with final
   Last reconfirmed|                            |2020-05-18
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW
                 CC|                            |anlauf at gcc dot gnu.org

--- Comment #1 from anlauf at gcc dot gnu.org ---
Confirmed regarding the memory leak.

Cannot confirm as regression.  My 8.2.1 (OpenSuse) leaks the same as other
versions according to valgrind.

Regression marker therefore removed.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
  2020-05-18 19:11 ` [Bug fortran/94361] " anlauf at gcc dot gnu.org
@ 2020-05-18 19:12 ` anlauf at gcc dot gnu.org
  2020-05-18 21:30 ` antony at cosmologist dot info
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: anlauf at gcc dot gnu.org @ 2020-05-18 19:12 UTC (permalink / raw)
  To: gcc-bugs

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

anlauf at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
           Priority|P3                          |P4

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
  2020-05-18 19:11 ` [Bug fortran/94361] " anlauf at gcc dot gnu.org
  2020-05-18 19:12 ` anlauf at gcc dot gnu.org
@ 2020-05-18 21:30 ` antony at cosmologist dot info
  2020-05-19  9:15 ` antony at cosmologist dot info
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: antony at cosmologist dot info @ 2020-05-18 21:30 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Antony Lewis <antony at cosmologist dot info> ---
I tried it on another system where gfortran 6.5 and 7.4.0 that don't leak, but
8.4.0 does, so in that sense at least I think it is a regression.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
                   ` (2 preceding siblings ...)
  2020-05-18 21:30 ` antony at cosmologist dot info
@ 2020-05-19  9:15 ` antony at cosmologist dot info
  2020-05-21 10:39 ` [Bug fortran/94361] [8/9/10/11 Regression] " anlauf at gcc dot gnu.org
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: antony at cosmologist dot info @ 2020-05-19  9:15 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Antony Lewis <antony at cosmologist dot info> ---
On Windows 8.1.0 does not leak, and on NERSC 8.3.0 20190222 (Cray Inc.) also
does not (but 9.2.0 does)... so not exactly sure what this means about when it
was introduced.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] [8/9/10/11 Regression] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
                   ` (3 preceding siblings ...)
  2020-05-19  9:15 ` antony at cosmologist dot info
@ 2020-05-21 10:39 ` anlauf at gcc dot gnu.org
  2020-05-23 19:13 ` anlauf at gcc dot gnu.org
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: anlauf at gcc dot gnu.org @ 2020-05-21 10:39 UTC (permalink / raw)
  To: gcc-bugs

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

anlauf at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|                            |6.5.0, 7.2.0, 7.4.0, 8.1.0
   Target Milestone|---                         |8.5
            Summary|Memory leak in nested types |[8/9/10/11 Regression]
                   |with final                  |Memory leak in nested types
                   |                            |with final
      Known to fail|                            |9.2.0

--- Comment #4 from anlauf at gcc dot gnu.org ---
(In reply to Antony Lewis from comment #3)
> On Windows 8.1.0 does not leak, and on NERSC 8.3.0 20190222 (Cray Inc.) also
> does not (but 9.2.0 does)... so not exactly sure what this means about when
> it was introduced.

So adding to known-to-work/fail.

I found a Debian machine with 7.2.0 and compared the dump tree with that of
7.4.1.  There is clearly a chunk of code related to finalization present in
7.2.0, but it is missing in 7.4.1:

  if (&ptr2->t != 0B)
    {
      {
        integer(kind=4) stat.5;

        if ((real(kind=4)[0:] * restrict) ptr2->t.dat.data == 0B)
          {
            stat.5 = 1;
          }
        else
          {
            __builtin_free (ptr2->t.dat.data);
            (real(kind=4)[0:] * restrict) ptr2->t.dat.data = 0B;
            stat.5 = 0;
          }
        if (stat.5 != 0) goto L.9;
        L.9:;
        ignore = stat.5;
      }
    }
  L.8:;
  {
    struct array0_typewithfinal desc.6;

    desc.6.dtype = 40;
    desc.6.data = (void * restrict) &ptr2->t.x;
    __final_debug_Typewithfinal (&desc.6);
  }

Looking at the changes to the 7 series leading to 7.4.1 might indicate the
which commit (or backport) caused this.

Marking as (7)/8/9/10/11 regression.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] [8/9/10/11 Regression] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
                   ` (4 preceding siblings ...)
  2020-05-21 10:39 ` [Bug fortran/94361] [8/9/10/11 Regression] " anlauf at gcc dot gnu.org
@ 2020-05-23 19:13 ` anlauf at gcc dot gnu.org
  2020-05-24 12:26 ` tkoenig at gcc dot gnu.org
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: anlauf at gcc dot gnu.org @ 2020-05-23 19:13 UTC (permalink / raw)
  To: gcc-bugs

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

anlauf at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |tkoenig at gcc dot gnu.org

--- Comment #5 from anlauf at gcc dot gnu.org ---
Reverting the commit

commit b81f7b83631be7dedcdcf44eed6dd575ada3ac23
Author: Thomas Koenig <tkoenig@gcc.gnu.org>
Date:   Sat Apr 6 22:10:28 2019 +0000

    re PR fortran/87352 (Large stack usage with new gfortran)

    2019-04-06  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/87352
            * gfortran.h (gfc_component): Add finalized field.
            * class.c (finalize_component): If the component is already
            finalized, return early.  Set component->finalized on exit.

    2019-04-06  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/87352
            * gfortran.dg/finalize_28.f90: Adjust count of __builtin_free.
            * gfortran.dg/finalize_33.f90: Likewise.
            * gfortran.dg/finalize_34.f90: New test.

    From-SVN: r270184

fixes the memory leak.

CCing Thomas.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] [8/9/10/11 Regression] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
                   ` (5 preceding siblings ...)
  2020-05-23 19:13 ` anlauf at gcc dot gnu.org
@ 2020-05-24 12:26 ` tkoenig at gcc dot gnu.org
  2020-05-31 10:00 ` cvs-commit at gcc dot gnu.org
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: tkoenig at gcc dot gnu.org @ 2020-05-24 12:26 UTC (permalink / raw)
  To: gcc-bugs

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

Thomas Koenig <tkoenig at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |tkoenig at gcc dot gnu.org

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] [8/9/10/11 Regression] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
                   ` (6 preceding siblings ...)
  2020-05-24 12:26 ` tkoenig at gcc dot gnu.org
@ 2020-05-31 10:00 ` cvs-commit at gcc dot gnu.org
  2020-06-01 18:16 ` cvs-commit at gcc dot gnu.org
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-05-31 10:00 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Thomas Kथà¤nig <tkoenig@gcc.gnu.org>:

https://gcc.gnu.org/g:811f902b764c5a13178cbd7588e96c16b3fab504

commit r11-749-g811f902b764c5a13178cbd7588e96c16b3fab504
Author: Thomas Koenig <tkoenig@gcc.gnu.org>
Date:   Sun May 31 10:26:40 2020 +0200

    Finalization depends on the expression, not on the component.

    This patch fixes a 8/9/10/11 regression, where finalized types
    were not finalized (and deallocated), which led to memory
    leaks.

    gcc/fortran/ChangeLog:

    2020-05-24  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/94361
            * class.c (finalize_component): Use expr->finalized instead of
            comp->finalized.
            * gfortran.h (gfc_component): Remove finalized member.
            (gfc_expr): Add it here instead.

    gcc/testsuite/ChangeLog:

    2020-05-24  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/94361
            * gfortran.dg/finalize_28.f90: Adjusted free counts.
            * gfortran.dg/finalize_33.f90: Likewise.
            * gfortran.dg/finalize_34.f90: Likewise.
            * gfortran.dg/finalize_35.f90: New test.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] [8/9/10/11 Regression] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
                   ` (7 preceding siblings ...)
  2020-05-31 10:00 ` cvs-commit at gcc dot gnu.org
@ 2020-06-01 18:16 ` cvs-commit at gcc dot gnu.org
  2020-06-01 18:33 ` cvs-commit at gcc dot gnu.org
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 13+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-06-01 18:16 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Thomas Kथà¤nig
<tkoenig@gcc.gnu.org>:

https://gcc.gnu.org/g:b703627d668257c0955a43838288e91973bf2721

commit r10-8218-gb703627d668257c0955a43838288e91973bf2721
Author: Thomas Koenig <tkoenig@gcc.gnu.org>
Date:   Sun May 31 10:26:40 2020 +0200

    Finalization depends on the expression, not on the component.

    This patch fixes a 8/9/10/11 regression, where finalized types
    were not finalized (and deallocated), which led to memory
    leaks.

    gcc/fortran/ChangeLog:

    2020-05-24  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/94361
            * class.c (finalize_component): Use expr->finalized instead of
            comp->finalized.
            * gfortran.h (gfc_component): Remove finalized member.
            (gfc_expr): Add it here instead.

    gcc/testsuite/ChangeLog:

    2020-05-24  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/94361
            * gfortran.dg/finalize_28.f90: Adjusted free counts.
            * gfortran.dg/finalize_33.f90: Likewise.
            * gfortran.dg/finalize_34.f90: Likewise.
            * gfortran.dg/finalize_35.f90: New test.

    (cherry picked from commit 811f902b764c5a13178cbd7588e96c16b3fab504)

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] [8/9/10/11 Regression] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
                   ` (8 preceding siblings ...)
  2020-06-01 18:16 ` cvs-commit at gcc dot gnu.org
@ 2020-06-01 18:33 ` cvs-commit at gcc dot gnu.org
  2020-06-01 18:49 ` cvs-commit at gcc dot gnu.org
  2020-06-01 18:52 ` tkoenig at gcc dot gnu.org
  11 siblings, 0 replies; 13+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-06-01 18:33 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-9 branch has been updated by Thomas Kथà¤nig
<tkoenig@gcc.gnu.org>:

https://gcc.gnu.org/g:2a0de88ccf2ecc6659b0f1e4580c1ce5cff976b3

commit r9-8643-g2a0de88ccf2ecc6659b0f1e4580c1ce5cff976b3
Author: Thomas Koenig <tkoenig@gcc.gnu.org>
Date:   Sun May 31 10:26:40 2020 +0200

    Finalization depends on the expression, not on the component.

    This patch fixes a 8/9/10/11 regression, where finalized types
    were not finalized (and deallocated), which led to memory
    leaks.

    gcc/fortran/ChangeLog:

    2020-05-24  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/94361
            * class.c (finalize_component): Use expr->finalized instead of
            comp->finalized.
            * gfortran.h (gfc_component): Remove finalized member.
            (gfc_expr): Add it here instead.

    gcc/testsuite/ChangeLog:

    2020-05-24  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/94361
            * gfortran.dg/finalize_28.f90: Adjusted free counts.
            * gfortran.dg/finalize_33.f90: Likewise.
            * gfortran.dg/finalize_34.f90: Likewise.
            * gfortran.dg/finalize_35.f90: New test.

    (cherry picked from commit 811f902b764c5a13178cbd7588e96c16b3fab504)

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] [8/9/10/11 Regression] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
                   ` (9 preceding siblings ...)
  2020-06-01 18:33 ` cvs-commit at gcc dot gnu.org
@ 2020-06-01 18:49 ` cvs-commit at gcc dot gnu.org
  2020-06-01 18:52 ` tkoenig at gcc dot gnu.org
  11 siblings, 0 replies; 13+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2020-06-01 18:49 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #9 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-8 branch has been updated by Thomas Kथà¤nig
<tkoenig@gcc.gnu.org>:

https://gcc.gnu.org/g:75f5824b77632ef583a7a65302b326e8bf1b851c

commit r8-10289-g75f5824b77632ef583a7a65302b326e8bf1b851c
Author: Thomas Koenig <tkoenig@gcc.gnu.org>
Date:   Sun May 31 10:26:40 2020 +0200

    Finalization depends on the expression, not on the component.

    This patch fixes a 8/9/10/11 regression, where finalized types
    were not finalized (and deallocated), which led to memory
    leaks.

    gcc/fortran/ChangeLog:

    2020-05-24  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/94361
            * class.c (finalize_component): Use expr->finalized instead of
            comp->finalized.
            * gfortran.h (gfc_component): Remove finalized member.
            (gfc_expr): Add it here instead.

    gcc/testsuite/ChangeLog:

    2020-05-24  Thomas Koenig  <tkoenig@gcc.gnu.org>

            PR fortran/94361
            * gfortran.dg/finalize_28.f90: Adjusted free counts.
            * gfortran.dg/finalize_34.f90: Likewise.
            * gfortran.dg/finalize_35.f90: New test.

    (cherry picked from commit 2a0de88ccf2ecc6659b0f1e4580c1ce5cff976b3)

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [Bug fortran/94361] [8/9/10/11 Regression] Memory leak in nested types with final
  2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
                   ` (10 preceding siblings ...)
  2020-06-01 18:49 ` cvs-commit at gcc dot gnu.org
@ 2020-06-01 18:52 ` tkoenig at gcc dot gnu.org
  11 siblings, 0 replies; 13+ messages in thread
From: tkoenig at gcc dot gnu.org @ 2020-06-01 18:52 UTC (permalink / raw)
  To: gcc-bugs

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

Thomas Koenig <tkoenig at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|ASSIGNED                    |RESOLVED

--- Comment #10 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Fixed on all open branches.

Thanks for the bug report!

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-06-01 18:52 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-27 16:46 [Bug fortran/94361] New: Memory leak in nested types with final antony at cosmologist dot info
2020-05-18 19:11 ` [Bug fortran/94361] " anlauf at gcc dot gnu.org
2020-05-18 19:12 ` anlauf at gcc dot gnu.org
2020-05-18 21:30 ` antony at cosmologist dot info
2020-05-19  9:15 ` antony at cosmologist dot info
2020-05-21 10:39 ` [Bug fortran/94361] [8/9/10/11 Regression] " anlauf at gcc dot gnu.org
2020-05-23 19:13 ` anlauf at gcc dot gnu.org
2020-05-24 12:26 ` tkoenig at gcc dot gnu.org
2020-05-31 10:00 ` cvs-commit at gcc dot gnu.org
2020-06-01 18:16 ` cvs-commit at gcc dot gnu.org
2020-06-01 18:33 ` cvs-commit at gcc dot gnu.org
2020-06-01 18:49 ` cvs-commit at gcc dot gnu.org
2020-06-01 18:52 ` tkoenig at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).