public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/46487] New: allocatable scalars leak memory (allocatable_scalar_5.f90)
@ 2010-11-15 15:53 burnus at gcc dot gnu.org
  2010-11-16 13:54 ` [Bug fortran/46487] " burnus at gcc dot gnu.org
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: burnus at gcc dot gnu.org @ 2010-11-15 15:53 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46487

           Summary: allocatable scalars leak memory
                    (allocatable_scalar_5.f90)
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: burnus@gcc.gnu.org
                CC: janus@gcc.gnu.org
            Blocks: 46485


The program allocatable_scalar_5.f90 leaks memory - even with the following
patch applied. Valgrind shows:

 LEAK SUMMARY:
    definitely lost: 8 bytes in 2 blocks

One finds twice:

 4 bytes in 1 blocks are definitely lost in loss record 1 of 2
   at 0x4C26C36: malloc (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x400ACE: func.1538 (allocatable_scalar_5.f90:36)
   by 0x4008D1: MAIN__ (allocatable_scalar_5.f90:15)
   by 0x400B40: main (allocatable_scalar_5.f90:27)

where the crucial lines are:
    34      if (allocated (func)) call abort ()
    35      if (alloc) then
    36        allocate(func)
    37        func = 5332


Note: The following patch is needed for the test case to make it valid; cf. PR
46484


diff --git a/gcc/testsuite/gfortran.dg/allocatable_scalar_5.f90
b/gcc/testsuite/gfortran.dg/allocatable_scalar_5.f90
index cee95a1..efa40e9 100644
--- a/gcc/testsuite/gfortran.dg/allocatable_scalar_5.f90
+++ b/gcc/testsuite/gfortran.dg/allocatable_scalar_5.f90
@@ -3,3 +3,3 @@
 !
-! PR fortran/41872
+! PR fortran/41872; updated due to PR fortran/46484
 !
@@ -13,4 +13,2 @@ program test
   if (allocated (a)) call abort ()
-  if (allocated (func (.false.))) call abort ()
-  if (.not.allocated (func (.true.))) call abort ()
   b = 7
@@ -30,3 +28,2 @@ program test

-  if (allocated (func2 ())) call abort ()
 contains
@@ -43,6 +40,2 @@ contains

-  function func2 ()
-    integer, allocatable ::  func2
-  end function func2
-
   subroutine intout (dum, alloc)


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

* [Bug fortran/46487] allocatable scalars leak memory (allocatable_scalar_5.f90)
  2010-11-15 15:53 [Bug fortran/46487] New: allocatable scalars leak memory (allocatable_scalar_5.f90) burnus at gcc dot gnu.org
@ 2010-11-16 13:54 ` burnus at gcc dot gnu.org
  2013-06-26 17:52 ` [Bug fortran/46487] Missing memory freeing for functions returning allocatable scalars (allocatable_scalar_5.f90) dominiq at lps dot ens.fr
  2013-08-25 14:47 ` burnus at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: burnus at gcc dot gnu.org @ 2010-11-16 13:54 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46487

--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-11-16 13:49:58 UTC ---
Well, the problem is actually simple:

program test
  implicit none
  integer :: b
  b = func()
contains
  function func ()
    integer, allocatable ::  func
    allocate(func)
    func = 5332
  end function func
end program test

The function "func" returns the allocatable scalar as:
  return __result_func;

In the main program, one has:
  b = *func ();
or - if "b" is allocatable:
  *b = *func ()

However, the proper method should be:
  {
     tmp = func()
     b = *tmp
     free (tmp);
  }

(Or replace: "free (tmp)" by "if (tmp != NULL) free(tmp)", which is identical
as free also accepts NULL.)

For arrays, it currently works without this detour as there the argument is
passed by value; doing likewise for allocatable scalars would be one -- ABI
breaking -- alternative.


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

* [Bug fortran/46487] Missing memory freeing for functions returning allocatable scalars (allocatable_scalar_5.f90)
  2010-11-15 15:53 [Bug fortran/46487] New: allocatable scalars leak memory (allocatable_scalar_5.f90) burnus at gcc dot gnu.org
  2010-11-16 13:54 ` [Bug fortran/46487] " burnus at gcc dot gnu.org
@ 2013-06-26 17:52 ` dominiq at lps dot ens.fr
  2013-08-25 14:47 ` burnus at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: dominiq at lps dot ens.fr @ 2013-06-26 17:52 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46487

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-06-26
     Ever confirmed|0                           |1

--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Still present at revision 200429.


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

* [Bug fortran/46487] Missing memory freeing for functions returning allocatable scalars (allocatable_scalar_5.f90)
  2010-11-15 15:53 [Bug fortran/46487] New: allocatable scalars leak memory (allocatable_scalar_5.f90) burnus at gcc dot gnu.org
  2010-11-16 13:54 ` [Bug fortran/46487] " burnus at gcc dot gnu.org
  2013-06-26 17:52 ` [Bug fortran/46487] Missing memory freeing for functions returning allocatable scalars (allocatable_scalar_5.f90) dominiq at lps dot ens.fr
@ 2013-08-25 14:47 ` burnus at gcc dot gnu.org
  2 siblings, 0 replies; 4+ messages in thread
From: burnus at gcc dot gnu.org @ 2013-08-25 14:47 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46487

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |DUPLICATE

--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> ---
Mark as duplicate of PR55603 - even if this PR is older.

*** This bug has been marked as a duplicate of bug 55603 ***


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

end of thread, other threads:[~2013-08-25 14:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-11-15 15:53 [Bug fortran/46487] New: allocatable scalars leak memory (allocatable_scalar_5.f90) burnus at gcc dot gnu.org
2010-11-16 13:54 ` [Bug fortran/46487] " burnus at gcc dot gnu.org
2013-06-26 17:52 ` [Bug fortran/46487] Missing memory freeing for functions returning allocatable scalars (allocatable_scalar_5.f90) dominiq at lps dot ens.fr
2013-08-25 14:47 ` burnus 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).