Bug path
‘outer’
:
event 1
24
void outer (void)
^~~~~
|
(1) entry to ‘outer’
‘outer’
:
event 2
30
i = SETJMP(env);
^~~~~~
|
(2) ‘setjmp’ called here
‘outer’
:
events 3-5
32
if (i == 0)
^
|
(3) following ‘true’ branch (when ‘i == 0’)...
33
{
34
foo (1);
~~~~~~~
|
(4) ...to here
35
middle ();
~~~~~~~~~
|
(5) calling ‘middle’ from ‘outer’
‘middle’
:
events 6-8
17
static void middle (void)
^~~~~~
|
(6) entry to ‘middle’
18
{
19
void *ptr = malloc (1024);
~~~~~~~~~~~~~
|
(7) allocated here
20
inner ();
~~~~~~~~
|
(8) calling ‘inner’ from ‘middle’
‘inner’
:
events 9-11
12
static void inner (void)
^~~~~
|
(9) entry to ‘inner’
13
{
14
longjmp (env, 1); /* { dg-warning "leak of 'ptr'" } */
~~~~~~~~~~~~~~~~
|
(10) ‘ptr’ leaks here; was allocated at (7)
(11) rewinding from ‘longjmp’ in ‘inner’...
‘outer’
:
event 12
30
i = SETJMP(env);
^~~~~~
|
(12) ...to ‘setjmp’ in ‘outer’ (saved at (2))