Bug path

test_1
‘test_1’: events 1-4
11void 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
6void 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
6void 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)