public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/61830] New: Memory leak with assignment to array of derived types with allocatable components
@ 2014-07-17 13:23 sfilippone at uniroma2 dot it
  2014-07-17 13:24 ` [Bug fortran/61830] " sfilippone at uniroma2 dot it
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: sfilippone at uniroma2 dot it @ 2014-07-17 13:23 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 61830
           Summary: Memory leak with assignment to array of derived types
                    with allocatable components
           Product: gcc
           Version: 4.8.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sfilippone at uniroma2 dot it

Created attachment 33132
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33132&action=edit
test case

Hi,
The attached code shows the problem. 
When I started investigating I was using 4.10 but I ran into PR61819 while
reducing the test case. 

With 4.8.3 I get the following:
--------------------------------------------
[sfilippo@jacobi runs]$ gfortran -v
Using built-in specs.
COLLECT_GCC=gfortran
COLLECT_LTO_WRAPPER=/usr/local/gnu/4.8.3/libexec/gcc/x86_64-unknown-linux-gnu/4.8.3/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-4.8.3/configure --prefix=/usr/local/gnu/4.8.3
--enable-languages=c,c++,fortran --with-gmp=/home/travel/GNUBUILD/gmp
--with-mpfr=/home/travel/GNUBUILD/mpfr --with-mpc=/home/travel/GNUBUILD/mpc
Thread model: posix
gcc version 4.8.3 (GCC) 
[sfilippo@jacobi runs]$ valgrind --leak-check=full ./foo-test-leak 
==20638== Memcheck, a memory error detector
==20638== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==20638== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==20638== Command: ./foo-test-leak
==20638== 
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
==20638== 
==20638== HEAP SUMMARY:
==20638==     in use at exit: 6,164 bytes in 23 blocks
==20638==   total heap usage: 89 allocs, 66 frees, 35,518 bytes allocated
==20638== 
==20638== 560 (48 direct, 512 indirect) bytes in 1 blocks are definitely lost
in loss record 3 of 5
==20638==    at 0x4A069EE: malloc (vg_replace_malloc.c:270)
==20638==    by 0x400B70: __foo_base_mod_MOD_foo_geall (foo-test-leak.f90:96)
==20638==    by 0x401F8B: __foo_scalar_field_mod_MOD_new_scalar_field
(foo-test-leak.f90:141)
==20638==    by 0x40271F: __foo_vector_field_mod_MOD_new_vector_field
(foo-test-leak.f90:163)
==20638==    by 0x402AC8: MAIN__ (foo-test-leak.f90:188)
==20638==    by 0x4031D3: main (foo-test-leak.f90:179)
==20638== 
==20638== 5,600 (480 direct, 5,120 indirect) bytes in 10 blocks are definitely
lost in loss record 5 of 5
==20638==    at 0x4A069EE: malloc (vg_replace_malloc.c:270)
==20638==    by 0x400B70: __foo_base_mod_MOD_foo_geall (foo-test-leak.f90:96)
==20638==    by 0x401F8B: __foo_scalar_field_mod_MOD_new_scalar_field
(foo-test-leak.f90:141)
==20638==    by 0x40271F: __foo_vector_field_mod_MOD_new_vector_field
(foo-test-leak.f90:163)
==20638==    by 0x402C9E: MAIN__ (foo-test-leak.f90:192)
==20638==    by 0x4031D3: main (foo-test-leak.f90:179)
==20638== 
==20638== LEAK SUMMARY:
==20638==    definitely lost: 528 bytes in 11 blocks
==20638==    indirectly lost: 5,632 bytes in 11 blocks
==20638==      possibly lost: 0 bytes in 0 blocks
==20638==    still reachable: 4 bytes in 1 blocks
==20638==         suppressed: 0 bytes in 0 blocks
==20638== Reachable blocks (those to which a pointer was found) are not shown.
==20638== To see them, rerun with: --leak-check=full --show-reachable=yes
==20638== 
==20638== For counts of detected and suppressed errors, rerun with: -v
==20638== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 6 from 6)
-------------------------------------------------------------------------------

If I change line 163 
    this%u = [new_scalar_field()]

into
    do i=1, size(this%u)
      associate(sf=>this%u(i))
        sf = new_scalar_field()
      end associate
    end do

then I get no leak

[sfilippo@jacobi runs]$ valgrind --leak-check=full ./foo-test-leak-fixed
==20852== Memcheck, a memory error detector
==20852== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==20852== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==20852== Command: ./foo-test-leak-fixed
==20852== 
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
 Scalar deallocation
 Deallocate class() component
==20852== 
==20852== HEAP SUMMARY:
==20852==     in use at exit: 4 bytes in 1 blocks
==20852==   total heap usage: 67 allocs, 66 frees, 29,364 bytes allocated
==20852== 
==20852== LEAK SUMMARY:
==20852==    definitely lost: 0 bytes in 0 blocks
==20852==    indirectly lost: 0 bytes in 0 blocks
==20852==      possibly lost: 0 bytes in 0 blocks
==20852==    still reachable: 4 bytes in 1 blocks
==20852==         suppressed: 0 bytes in 0 blocks
==20852== Reachable blocks (those to which a pointer was found) are not shown.
==20852== To see them, rerun with: --leak-check=full --show-reachable=yes
==20852== 
==20852== For counts of detected and suppressed errors, rerun with: -v
==20852== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 6)


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/61830] Memory leak with assignment to array of derived types with allocatable components
  2014-07-17 13:23 [Bug fortran/61830] New: Memory leak with assignment to array of derived types with allocatable components sfilippone at uniroma2 dot it
@ 2014-07-17 13:24 ` sfilippone at uniroma2 dot it
  2014-07-17 13:42 ` dominiq at lps dot ens.fr
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: sfilippone at uniroma2 dot it @ 2014-07-17 13:24 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Salvatore Filippone <sfilippone at uniroma2 dot it> ---
Created attachment 33133
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=33133&action=edit
workaround


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/61830] Memory leak with assignment to array of derived types with allocatable components
  2014-07-17 13:23 [Bug fortran/61830] New: Memory leak with assignment to array of derived types with allocatable components sfilippone at uniroma2 dot it
  2014-07-17 13:24 ` [Bug fortran/61830] " sfilippone at uniroma2 dot it
@ 2014-07-17 13:42 ` dominiq at lps dot ens.fr
  2014-12-25 23:15 ` dominiq at lps dot ens.fr
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: dominiq at lps dot ens.fr @ 2014-07-17 13:42 UTC (permalink / raw)
  To: gcc-bugs

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

Dominique d'Humieres <dominiq at lps dot ens.fr> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2014-07-17
     Ever confirmed|0                           |1

--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Confirmed.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/61830] Memory leak with assignment to array of derived types with allocatable components
  2014-07-17 13:23 [Bug fortran/61830] New: Memory leak with assignment to array of derived types with allocatable components sfilippone at uniroma2 dot it
  2014-07-17 13:24 ` [Bug fortran/61830] " sfilippone at uniroma2 dot it
  2014-07-17 13:42 ` dominiq at lps dot ens.fr
@ 2014-12-25 23:15 ` dominiq at lps dot ens.fr
  2015-10-16  8:22 ` [Bug fortran/61830] [4.9/5/6 regression] " rguenth at gcc dot gnu.org
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: dominiq at lps dot ens.fr @ 2014-12-25 23:15 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Note that the tests give an ICE with 4.9.2 and trunk (5.0):

 end module foo_vector_field_mod
 1
internal compiler error: in gfc_conv_descriptor_data_get, at
fortran/trans-array.c:146


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/61830] [4.9/5/6 regression] Memory leak with assignment to array of derived types with allocatable components
  2014-07-17 13:23 [Bug fortran/61830] New: Memory leak with assignment to array of derived types with allocatable components sfilippone at uniroma2 dot it
                   ` (2 preceding siblings ...)
  2014-12-25 23:15 ` dominiq at lps dot ens.fr
@ 2015-10-16  8:22 ` rguenth at gcc dot gnu.org
  2015-10-25 13:00 ` dominiq at lps dot ens.fr
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: rguenth at gcc dot gnu.org @ 2015-10-16  8:22 UTC (permalink / raw)
  To: gcc-bugs

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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |4.9.4


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/61830] [4.9/5/6 regression] Memory leak with assignment to array of derived types with allocatable components
  2014-07-17 13:23 [Bug fortran/61830] New: Memory leak with assignment to array of derived types with allocatable components sfilippone at uniroma2 dot it
                   ` (3 preceding siblings ...)
  2015-10-16  8:22 ` [Bug fortran/61830] [4.9/5/6 regression] " rguenth at gcc dot gnu.org
@ 2015-10-25 13:00 ` dominiq at lps dot ens.fr
  2015-10-25 21:31 ` pault at gcc dot gnu.org
  2015-10-25 21:38 ` pault at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: dominiq at lps dot ens.fr @ 2015-10-25 13:00 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
The ICE is fixed by the patch submitted at
https://gcc.gnu.org/ml/fortran/2015-10/msg00117.html.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/61830] [4.9/5/6 regression] Memory leak with assignment to array of derived types with allocatable components
  2014-07-17 13:23 [Bug fortran/61830] New: Memory leak with assignment to array of derived types with allocatable components sfilippone at uniroma2 dot it
                   ` (4 preceding siblings ...)
  2015-10-25 13:00 ` dominiq at lps dot ens.fr
@ 2015-10-25 21:31 ` pault at gcc dot gnu.org
  2015-10-25 21:38 ` pault at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: pault at gcc dot gnu.org @ 2015-10-25 21:31 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #7 from Paul Thomas <pault at gcc dot gnu.org> ---
Author: pault
Date: Sun Oct 25 21:31:12 2015
New Revision: 229303

URL: https://gcc.gnu.org/viewcvs?rev=229303&root=gcc&view=rev
Log:
2015-01-25  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/67171
        * trans-array.c (structure_alloc_comps): On deallocation of
        class components, reset the vptr to the declared type vtable
        and reset the _len field of unlimited polymorphic components.
        *trans-expr.c (gfc_find_and_cut_at_last_class_ref): Bail out on
        allocatable component references to the right of part reference
        with non-zero rank and return NULL.
        (gfc_reset_vptr): Simplify this function by using the function
        gfc_get_vptr_from_expr. Return if the vptr is NULL_TREE.
        (gfc_reset_len): If gfc_find_and_cut_at_last_class_ref returns
        NULL return.
        * trans-stmt.c (gfc_trans_allocate): Rely on the use of
        gfc_trans_assignment if expr3 is a variable expression since
        this deals correctly with array sections.

2015-01-25  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/67171
        * gfortran.dg/allocate_with_source_12.f03: New test

        PR fortran/61819
        * gfortran.dg/allocate_with_source_13.f03: New test

        PR fortran/61830
        * gfortran.dg/allocate_with_source_14.f03: New test

Added:
    trunk/gcc/testsuite/gfortran.dg/allocate_with_source_12.f03
    trunk/gcc/testsuite/gfortran.dg/allocate_with_source_13.f03
    trunk/gcc/testsuite/gfortran.dg/allocate_with_source_14.f03
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/trans-array.c
    trunk/gcc/fortran/trans-expr.c
    trunk/gcc/fortran/trans-stmt.c
    trunk/gcc/testsuite/ChangeLog


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug fortran/61830] [4.9/5/6 regression] Memory leak with assignment to array of derived types with allocatable components
  2014-07-17 13:23 [Bug fortran/61830] New: Memory leak with assignment to array of derived types with allocatable components sfilippone at uniroma2 dot it
                   ` (5 preceding siblings ...)
  2015-10-25 21:31 ` pault at gcc dot gnu.org
@ 2015-10-25 21:38 ` pault at gcc dot gnu.org
  6 siblings, 0 replies; 8+ messages in thread
From: pault at gcc dot gnu.org @ 2015-10-25 21:38 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from Paul Thomas <pault at gcc dot gnu.org> ---
Fixed on trunk - I'll see what I can do for the earlier branches.

Thanks for the report

Paul


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2015-10-25 21:38 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-17 13:23 [Bug fortran/61830] New: Memory leak with assignment to array of derived types with allocatable components sfilippone at uniroma2 dot it
2014-07-17 13:24 ` [Bug fortran/61830] " sfilippone at uniroma2 dot it
2014-07-17 13:42 ` dominiq at lps dot ens.fr
2014-12-25 23:15 ` dominiq at lps dot ens.fr
2015-10-16  8:22 ` [Bug fortran/61830] [4.9/5/6 regression] " rguenth at gcc dot gnu.org
2015-10-25 13:00 ` dominiq at lps dot ens.fr
2015-10-25 21:31 ` pault at gcc dot gnu.org
2015-10-25 21:38 ` pault at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).