Bug path

test_3
‘test_3’: events 1-2
46void test_3 (void *ptr)
^~~~~~
|
(1) entry to ‘test_3’
47{
48 called_by_test_3 (ptr, free);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
(2) calling ‘called_by_test_3’ from ‘test_3’
called_by_test_3
‘called_by_test_3’: events 3-4
41called_by_test_3 (void *ptr, deallocator_t dealloc_fn)
^~~~~~~~~~~~~~~~
|
(3) entry to ‘called_by_test_3’
42{
43 dealloc_fn (ptr); /* { dg-warning "double-'free'" } */
~~~~~~~~~~~~~~~~
|
(4) first ‘free’ here
‘test_3’: events 5-6
48 called_by_test_3 (ptr, free);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
(5) returning to ‘test_3’ from ‘called_by_test_3’
49 called_by_test_3 (ptr, free);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
(6) passing freed pointer ‘ptr’ in call to ‘called_by_test_3’ from ‘test_3’
called_by_test_3
‘called_by_test_3’: events 7-8
41called_by_test_3 (void *ptr, deallocator_t dealloc_fn)
^~~~~~~~~~~~~~~~
|
(7) entry to ‘called_by_test_3’
42{
43 dealloc_fn (ptr); /* { dg-warning "double-'free'" } */
~~~~~~~~~~~~~~~~
|
(8) second ‘free’ here; first ‘free’ was at (4)