re PR fortran/48700 (memory leak with MOVE_ALLOC)
2011-05-18 Janus Weil <janus@gcc.gnu.org> PR fortran/48700 * trans-intrinsic.c (gfc_conv_intrinsic_move_alloc): Deallocate 'TO' argument to avoid memory leaks. 2011-05-18 Janus Weil <janus@gcc.gnu.org> PR fortran/48700 * gfortran.dg/move_alloc_4.f90: New. From-SVN: r173874
This commit is contained in:
parent
b5ee675203
commit
8199eea14f
@ -6958,15 +6958,28 @@ gfc_conv_intrinsic_move_alloc (gfc_code *code)
|
||||
if (code->ext.actual->expr->rank == 0)
|
||||
{
|
||||
/* Scalar arguments: Generate pointer assignments. */
|
||||
gfc_expr *from, *to;
|
||||
gfc_expr *from, *to, *deal;
|
||||
stmtblock_t block;
|
||||
tree tmp;
|
||||
gfc_se se;
|
||||
|
||||
from = code->ext.actual->expr;
|
||||
to = code->ext.actual->next->expr;
|
||||
|
||||
gfc_start_block (&block);
|
||||
|
||||
/* Deallocate 'TO' argument. */
|
||||
gfc_init_se (&se, NULL);
|
||||
se.want_pointer = 1;
|
||||
deal = gfc_copy_expr (to);
|
||||
if (deal->ts.type == BT_CLASS)
|
||||
gfc_add_data_component (deal);
|
||||
gfc_conv_expr (&se, deal);
|
||||
tmp = gfc_deallocate_scalar_with_status (se.expr, NULL, true,
|
||||
deal, deal->ts);
|
||||
gfc_add_expr_to_block (&block, tmp);
|
||||
gfc_free_expr (deal);
|
||||
|
||||
if (to->ts.type == BT_CLASS)
|
||||
tmp = gfc_trans_class_assign (to, from, EXEC_POINTER_ASSIGN);
|
||||
else
|
||||
|
22
gcc/testsuite/gfortran.dg/move_alloc_4.f90
Normal file
22
gcc/testsuite/gfortran.dg/move_alloc_4.f90
Normal file
@ -0,0 +1,22 @@
|
||||
! { dg-do run }
|
||||
! { dg-options "-fdump-tree-original" }
|
||||
!
|
||||
! PR 48700: memory leak with MOVE_ALLOC
|
||||
!
|
||||
! Contributed by Salvatore Filippone <sfilippone@uniroma2.it>
|
||||
|
||||
program testmv3
|
||||
type bar
|
||||
integer, allocatable :: ia(:), ja(:)
|
||||
end type
|
||||
|
||||
type(bar), allocatable :: sm,sm2
|
||||
|
||||
allocate(sm)
|
||||
allocate(sm%ia(10),sm%ja(10))
|
||||
|
||||
call move_alloc(sm2,sm)
|
||||
|
||||
end program testmv3
|
||||
|
||||
! { dg-final { scan-tree-dump-times "__builtin_free" 9 "original" } }
|
Loading…
x
Reference in New Issue
Block a user