|
test_1
‘test_1’: events 1-4
11 | void test_1 (void *ptr, int a, int b) |
| ^~~~~~ |
| | |
| (1) entry to ‘test_1’ |
12 | { |
13 | if (a) |
| ~ |
| | |
| (2) following ‘true’ branch (when ‘a != 0’)... |
14 | calls_free_1 (ptr); |
| ~~~~~~~~~~~~~~~~~~ |
| | |
| (3) ...to here |
| (4) calling ‘calls_free_1’ from ‘test_1’ |
|
|
calls_free_1
‘calls_free_1’: events 5-6
6 | void calls_free_1 (void *ptr) |
| ^~~~~~~~~~~~ |
| | |
| (5) entry to ‘calls_free_1’ |
7 | { |
8 | free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */ |
| ~~~~~~~~~~ |
| | |
| (6) first ‘free’ here |
|
|
‘test_1’: events 7-10
14 | calls_free_1 (ptr); |
| ^~~~~~~~~~~~~~~~~~ |
| | |
| (7) returning to ‘test_1’ from ‘calls_free_1’ |
15 | |
16 | if (b) |
| ~ |
| | |
| (8) following ‘false’ branch (when ‘b == 0’)... |
[...] | |
20 | calls_free_1 (ptr); |
| ~~~~~~~~~~~~~~~~~~ |
| | |
| (9) ...to here |
| (10) passing freed pointer ‘ptr’ in call to ‘calls_free_1’ from ‘test_1’ |
|
|
calls_free_1
‘calls_free_1’: events 11-12
6 | void calls_free_1 (void *ptr) |
| ^~~~~~~~~~~~ |
| | |
| (11) entry to ‘calls_free_1’ |
7 | { |
8 | free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */ |
| ~~~~~~~~~~ |
| | |
| (12) second ‘free’ here; first ‘free’ was at (6) |
|
|
|