leak of ‘
ptr
’
[
CWE-401
]
[
-Wanalyzer-malloc-leak
]
7
do_something (x); // { dg-warning "leak" }
~~~~~~~~~~~~~^~~
int outer(int)
int outer(int)
:
events 1-3
13
int outer (int x)
^~~~~
|
(1) entry to ‘outer’
cluster_memory_regions
id_1
Stack
Frame: int outer(int)
14
{
15
void *ptr = __builtin_malloc (1024); // { dg-message "allocated here" }
~~~~~~~~~~~~~~~~~~~~~~~
|
(2) allocated here
cluster_memory_regions
cluster_6
Heap
id_1
Stack
Frame: int outer(int)
ptr_3
void *
&HEAP_ALLOCATED_REGION(15)
id_8
Unchecked 1024 byte allocation
id_1:e->id_8:id_9
16
17
int rval = inner (x);
~~~~~~~~~
|
(3) calling ‘inner’ from ‘outer’
cluster_memory_regions
cluster_7
Heap
id_1
Stack
Frame: int outer(int)
ptr_3
void *
&HEAP_ALLOCATED_REGION(15)
_6
int
CONJURED(_6 = inner (x_4(D));, _6)
id_9
Unchecked 1024 byte allocation
id_1:e->id_9:id_10
int inner(int)
int inner(int)
:
events 4-6
5
int inner (int x)
^~~~~
|
(4) entry to ‘inner’
cluster_memory_regions
cluster_9
Heap
id_1
Stack
Frame: int inner(int)
x_2(D)
int
INIT_VAL(x_4(D))
Frame: int outer(int)
ptr_3
void *
&HEAP_ALLOCATED_REGION(15)
_6
int
CONJURED(_6 = inner (x_4(D));, _6)
id_11
Unchecked 1024 byte allocation
id_1:e->id_11:id_12
6
{
7
do_something (x); // { dg-warning "leak" }
~~~~~~~~~~~~~~~~
|
(5) if ‘void do_something(int)’ throws an exception...
(6) ⚠️ ‘ptr’ leaks here; was allocated at (2)
cluster_memory_regions
cluster_8
Heap
id_1
Stack
Frame: int inner(int)
Frame: int outer(int)
ptr_3
void *
&HEAP_ALLOCATED_REGION(15)
_6
int
CONJURED(_6 = inner (x_4(D));, _6)
id_10
Unchecked 1024 byte allocation
id_1:e->id_10:id_11
id_13
FIXME