https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66079
Paul Thomas <pault at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2015-05-16
CC| |pault at gcc dot gnu.org
Assignee|unassigned at gcc dot gnu.org |pault at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #1 from Paul Thomas <pault at gcc dot gnu.org> ---
Hi Damian,
The reason for this memory leak is rather obvious:
newrealvec ()
{
struct subdata * d;
try
{
d = 0B;
{
struct subdata D.3386;
struct subdata D.3385;
struct subdata subdata.0;
subdata.0.b = (integer(kind=4) *) __builtin_malloc (4);
*subdata.0.b = 0;
D.3385 = subdata.0;
D.3386 = D.3385;
if (d != 0B)
{
_gfortran_runtime_error_at (&"At line 10 of file
pr66079.f90"[1]{lb: 1 sz: 1}, &"Attempting to allocate already allocated
variable \'%s\'"[1]{lb: 1 sz: 1}, &"d"[1]{lb: 1 sz: 1});
}
else
{
d = (struct subdata *) __builtin_malloc (8);
if (d == 0B)
{
_gfortran_os_error (&"Allocation would exceed memory
limit"[1]{lb: 1 sz: 1});
}
}
d->b = 0B;
{
struct subdata subdata.1;
subdata.1.b = (integer(kind=4) *) __builtin_malloc (4);
*subdata.1.b = 0;
*d = subdata.1;
}
}
}
finally
{
if (d != 0B)
{
if (d->b != 0B)
{
__builtin_free ((void *) d->b);
}
d->b = 0B;
__builtin_free ((void *) d);
}
}
}
subdata.1 gets freed in the finally block but subdata.0, which is redundant in
any case, does not.
Confirmed - thanks for the report.... I just have to find out why it is we wind
up with two subdata's.
Cheers
Paul