re PR fortran/49466 (Memory leak with assignment of extended derived types)
2011-06-27 Janus Weil <janus@gcc.gnu.org> PR fortran/49466 * trans-array.c (structure_alloc_comps): Make sure sub-components and extended types are correctly deallocated. 2011-06-27 Janus Weil <janus@gcc.gnu.org> PR fortran/49466 * gfortran.dg/allocatable_scalar_9.f90: Modified. * gfortran.dg/extends_14.f03: Modified. From-SVN: r175563
This commit is contained in:
parent
5d8d1543f5
commit
dbb7247b9a
5 changed files with 53 additions and 9 deletions
|
@ -1,3 +1,9 @@
|
|||
2011-06-27 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/49466
|
||||
* trans-array.c (structure_alloc_comps): Make sure sub-components
|
||||
and extended types are correctly deallocated.
|
||||
|
||||
2011-06-21 Andrew MacLeod <amacleod@redhat.com>
|
||||
|
||||
* trans-openmp.c: Add sync_ or SYNC__ to builtin names.
|
||||
|
|
|
@ -6682,18 +6682,22 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
|
|||
switch (purpose)
|
||||
{
|
||||
case DEALLOCATE_ALLOC_COMP:
|
||||
if (cmp_has_alloc_comps && !c->attr.pointer)
|
||||
{
|
||||
/* Do not deallocate the components of ultimate pointer
|
||||
components. */
|
||||
comp = fold_build3_loc (input_location, COMPONENT_REF, ctype,
|
||||
decl, cdecl, NULL_TREE);
|
||||
rank = c->as ? c->as->rank : 0;
|
||||
tmp = structure_alloc_comps (c->ts.u.derived, comp, NULL_TREE,
|
||||
rank, purpose);
|
||||
gfc_add_expr_to_block (&fnblock, tmp);
|
||||
}
|
||||
|
||||
if (c->attr.allocatable && c->attr.dimension)
|
||||
{
|
||||
comp = fold_build3_loc (input_location, COMPONENT_REF, ctype,
|
||||
decl, cdecl, NULL_TREE);
|
||||
if (cmp_has_alloc_comps && !c->attr.pointer)
|
||||
{
|
||||
/* Do not deallocate the components of ultimate pointer
|
||||
components. */
|
||||
tmp = structure_alloc_comps (c->ts.u.derived, comp, NULL_TREE,
|
||||
c->as->rank, purpose);
|
||||
gfc_add_expr_to_block (&fnblock, tmp);
|
||||
}
|
||||
tmp = gfc_trans_dealloc_allocated (comp);
|
||||
gfc_add_expr_to_block (&fnblock, tmp);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2011-06-27 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/49466
|
||||
* gfortran.dg/allocatable_scalar_9.f90: Modified.
|
||||
* gfortran.dg/extends_14.f03: Modified.
|
||||
|
||||
2011-06-27 Janis Johnson <janisjo@codesourcery.com>
|
||||
|
||||
* lib/target-supports-dg.exp (dg-require-effective-target): Return
|
||||
|
|
|
@ -49,7 +49,7 @@ if(allocated(na3%b3)) call abort()
|
|||
if(allocated(na4%b4)) call abort()
|
||||
end
|
||||
|
||||
! { dg-final { scan-tree-dump-times "__builtin_free" 32 "original" } }
|
||||
! { dg-final { scan-tree-dump-times "__builtin_free" 38 "original" } }
|
||||
! { dg-final { cleanup-tree-dump "original" } }
|
||||
|
||||
! { dg-final { cleanup-modules "m" } }
|
||||
|
|
28
gcc/testsuite/gfortran.dg/extends_14.f03
Normal file
28
gcc/testsuite/gfortran.dg/extends_14.f03
Normal file
|
@ -0,0 +1,28 @@
|
|||
! { dg-do compile }
|
||||
! { dg-options "-fdump-tree-original" }
|
||||
!
|
||||
! PR 49466: [4.6/4.7 Regression] Memory leak with assignment of extended derived types
|
||||
!
|
||||
! Contributed by Rich Townsend <townsend@astro.wisc.edu>
|
||||
|
||||
program evolve_aflow
|
||||
|
||||
implicit none
|
||||
|
||||
type :: state_t
|
||||
real, allocatable :: U(:)
|
||||
end type
|
||||
|
||||
type, extends(state_t) :: astate_t
|
||||
end type
|
||||
|
||||
type(astate_t) :: a,b
|
||||
|
||||
allocate(a%U(1000))
|
||||
|
||||
a = b
|
||||
|
||||
end program
|
||||
|
||||
! { dg-final { scan-tree-dump-times "__builtin_free" 3 "original" } }
|
||||
! { dg-final { cleanup-tree-dump "original" } }
|
Loading…
Add table
Reference in a new issue