Commit f391a855 by Tobias Burnus

re PR fortran/53389 (-frealloc-lhs: memory leak when assigning array function…

re PR fortran/53389 (-frealloc-lhs: memory leak when assigning array function result to allocatable array, where one of its supplied arguments is itself an array function result)

2012-05-22  Tobias Burnus  <burnus@net-b.de>

        PR fortran/53389
        * trans-array.c (gfc_add_loop_ss_code): Don't evaluate
        * expression, if
        ss->is_alloc_lhs is set.

2012-05-22  Tobias Burnus  <burnus@net-b.de>

        PR fortran/53389
        * gfortran.dg/realloc_on_assign_15.f90: New.

From-SVN: r187769
parent 633d9236
2012-05-22 Tobias Burnus <burnus@net-b.de>
PR fortran/53389
* trans-array.c (gfc_add_loop_ss_code): Don't evaluate expression, if
ss->is_alloc_lhs is set.
2012-05-22 Dodji Seketeli <dodji@redhat.com>
PR c++/53322
* f95-lang.c (gfc_init_builtin_functions): Remove the unused
typedef builtin_type.
typedef builtin_type.
2012-05-14 Janne Blomqvist <jb@gcc.gnu.org>
......
......@@ -2401,6 +2401,11 @@ gfc_add_loop_ss_code (gfc_loopinfo * loop, gfc_ss * ss, bool subscript,
bool skip_nested = false;
int n;
/* Don't evaluate the arguments for realloc_lhs_loop_for_fcn_call; otherwise,
arguments could get evaluated multiple times. */
if (ss->is_alloc_lhs)
return;
outer_loop = outermost_loop (loop);
/* TODO: This can generate bad code if there are ordering dependencies,
......
2012-05-22 Tobias Burnus <burnus@net-b.de>
PR fortran/53389
* gfortran.dg/realloc_on_assign_15.f90: New.
2012-05-22 Richard Guenther <rguenther@suse.de>
PR middle-end/51071
......@@ -12,7 +17,7 @@
PR c++/53322
* g++.dg/warn/Wunused-local-typedefs.C: Adjust to use -Wunused
instead of -Wunused-local-typedefs.
instead of -Wunused-local-typedefs.
2012-05-21 Paolo Carlini <paolo.carlini@oracle.com>
......
! { dg-do run }
!
! PR fortran/53389
!
! The program was leaking memory before due to
! realloc on assignment and nested functions.
!
module foo
implicit none
contains
function filler(array, val)
real, dimension(:), intent(in):: array
real, dimension(size(array)):: filler
real, intent(in):: val
filler=val
end function filler
end module
program test
use foo
implicit none
real, dimension(:), allocatable:: x, y
integer, parameter:: N=1000 !*1000
integer:: i
! allocate( x(N) )
allocate( y(N) )
y=0.0
do i=1, N
! print *,i
x=filler(filler(y, real(2*i)), real(i))
y=y+x
end do
end program test
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment