Hi all, the attached patch is close to trivial and fixes a memory-leak regression that appeared after the implementation of finalization.
My suspicion it that it's simply a copy'n'paste error, where the wrong attribute was copied from very similar code a few lines above, but I'd like to have that confirmed by the original author (which should be Tobias). Regtested on x86_64-unknown-linux-gnu. Ok for trunk and 4.9? Cheers, Janus 2015-01-18 Janus Weil <ja...@gcc.gnu.org> PR fortran/60922 * class.c (finalize_component): Apply the check for 'fini_coarray' only to coarray components. 2015-01-18 Janus Weil <ja...@gcc.gnu.org> PR fortran/60922 * gfortran.dg/class_allocate_17.f90: Extended.
Index: gcc/fortran/class.c =================================================================== --- gcc/fortran/class.c (Revision 219813) +++ gcc/fortran/class.c (Arbeitskopie) @@ -875,7 +875,7 @@ finalize_component (gfc_expr *expr, gfc_symbol *de /* Add IF (fini_coarray). */ if (comp->attr.codimension || (comp->ts.type == BT_CLASS && CLASS_DATA (comp) - && CLASS_DATA (comp)->attr.allocatable)) + && CLASS_DATA (comp)->attr.codimension)) { block = gfc_get_code (EXEC_IF); if (*code)
! { dg-do compile } ! { dg-options "-fdump-tree-original" } ! ! PR 60922: [4.9/5 regression] Memory leak with allocatable CLASS components ! ! Contributed by Salvatore Filippone <sfilipp...@uniroma2.it> program test_leak implicit none type d_base_vect_type end type type d_vect_type class(d_base_vect_type), allocatable :: v end type call test() contains subroutine test() class(d_vect_type), allocatable :: x allocate(x) allocate(x%v) print *,"allocated!" end subroutine end ! { dg-final { scan-tree-dump-times "fini_coarray" 1 "original" } } ! { dg-final { cleanup-tree-dump "original" } }