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

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

https://gcc.gnu.org/g:1af22e455584ef5fcad2b4474c1efc3fd26f6cb3

commit r11-1296-g1af22e455584ef5fcad2b4474c1efc3fd26f6cb3
Author: Thomas Koenig <tkoe...@gcc.gnu.org>
Date:   Sun Jun 14 13:01:24 2020 +0200

    When avoiding double deallocation, look at namespace, expression and
component.

    Our finalization handling is a mess.  Really, we should get to try and get
    this fixed for gcc 11.

    In the meantime, here is a patch which fixes a regression I introduced
    when fixing a regression with a memory leak.  The important thing
    here is to realize that we do not need to finalize (and deallocate)
    multiple times for the same expression and the same component
    in the same namespace.  It might cause code size regressions, but
    better big code than wrong code...

    gcc/fortran/ChangeLog:

            PR fortran/94109
            * class.c (finalize_component): Return early if finalization has
            already happened for expression and component within namespace.
            * gfortran.h (gfc_was_finalized): New type.
            (gfc_namespace): Add member was_finalzed.
            (gfc_expr): Remove finalized.
            * symbol.c (gfc_free_namespace): Free was_finalized.

    gcc/testsuite/ChangeLog:

            PR fortran/94109
            * gfortran.dg/finalize_34.f90: Adjust free counts.
            * gfortran.dg/finalize_36.f90: New test.

Reply via email to