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

            Bug ID: 69080
           Summary: No automatic deallocation of allocatable function
                    results
           Product: gcc
           Version: 4.9.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: sv.muel...@tu-braunschweig.de
  Target Milestone: ---

Created attachment 37186
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37186&action=edit
Test program and module

Note: This is my first bug report

I noticed that allocatable function results are not always deallocated. I'm
actually not sure if this is correct behavior or not.

See code attachment for test prog.

Architecture is Debian GNU/Linux 8.2 (jessie) x86_64, gfortran has only been
called with "gfortran dummy_module.f90 prog.f90". "valgrind --leak-check=full
./a.out" then tells me:

==26772== Memcheck, a memory error detector
==26772== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==26772== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
==26772== Command: ./a.out
==26772== 
==26772== 
==26772== HEAP SUMMARY:
==26772==     in use at exit: 1 bytes in 1 blocks
==26772==   total heap usage: 25 allocs, 24 frees, 12,832 bytes allocated
==26772== 
==26772== 1 bytes in 1 blocks are definitely lost in loss record 1 of 1
==26772==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==26772==    by 0x400828: __dummy_module_MOD_dummy_create_allocatable (in
XXXX/a.out)
==26772==    by 0x4007C4: __dummy_module_MOD_dummy_trigger (in XXXX/a.out)
==26772==    by 0x4008CA: MAIN__ (in XXXX/a.out)
==26772==    by 0x400990: main (in XXXX/a.out)
==26772== 
==26772== LEAK SUMMARY:
==26772==    definitely lost: 1 bytes in 1 blocks
==26772==    indirectly lost: 0 bytes in 0 blocks
==26772==      possibly lost: 0 bytes in 0 blocks
==26772==    still reachable: 0 bytes in 0 blocks
==26772==         suppressed: 0 bytes in 0 blocks
==26772== 
==26772== For counts of detected and suppressed errors, rerun with: -v
==26772== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

Is this correct behavior? If so, why?

Thanks in advance.

Reply via email to