http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51175
Bug #: 51175
Summary: Memory Leak with Transfer intrinsic
Classification: Unclassified
Product: gcc
Version: 4.6.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: [email protected]
ReportedBy: [email protected]
Hello,
I am using gfortran 4.6.2 on MacOSX 10.7.
It appears that this code involving transfer generates a memory leak
module LeakModule
implicit none
contains
subroutine Leaking(stringdata, string)
character(len=1), intent(in) :: stringdata(:)
character(len=*), intent(out) :: string
character(len=1) :: singleChar(1)
!integer :: numChars
!numChars = size(transfer(stringdata,singleChar))
!string = ''
string = transfer(stringdata, string)
!string(numChars+1:) = ' '
end subroutine
subroutine Foo()
character(len=1) :: stringdata(3)
character(len=20) :: outstring
stringdata(1) = 'H'
stringdata(2) = 'i'
stringdata(3) = '!'
call Leaking(stringdata, outstring)
print *, outstring
end subroutine
end module
program test
use LeakModule
call foo()
end
According to the produced assembler, malloc gets called inside the Leaking
routine, but the asm of the caller never issues a free of that allocated
memory. The same happens even if the string is a local variable with specified
len.
The commented code (calculating the size of the data involved) correctly issues
one malloc and one free.
Thanks