| 
  
 test 
  | 
     ‘test’: events 1-2 
|    19 | void test (void *ptr) /* { dg-message "\\(1\\) entry to 'test'" } */ |  
 |      ^~~~ |  
 |      | |  
 |      (1) entry to ‘test’ |  
| [...] |  |  
|    23 |   calls_free (ptr); /* { dg-message "\\(2\\) calling 'calls_free' from 'test'" "event 2" } */ |  
 |   ~~~~~~~~~~~~~~~~ |  
 |   | |  
 |   (2) calling ‘calls_free’ from ‘test’ |  
 
 |   
   | 
  
 calls_free 
  | 
     ‘calls_free’: events 3-4 
|     6 | calls_free (void *victim) /* { dg-message "\\(3\\) entry to 'calls_free'" "event 3" } */ |  
 | ^~~~~~~~~~ |  
 | | |  
 | (3) entry to ‘calls_free’ |  
| [...] |  |  
|     9 |   free (victim); /* { dg-warning "double-'free' of 'victim'" "warning" } */ |  
 |   ~~~~~~~~~~~~~ |  
 |   | |  
 |   (4) first ‘free’ here |  
 
 |   
 |   
  | 
     ‘test’: events 5-6 
|    23 |   calls_free (ptr); /* { dg-message "\\(2\\) calling 'calls_free' from 'test'" "event 2" } */ |  
 |   ^~~~~~~~~~~~~~~~ |  
 |   | |  
 |   (5) returning to ‘test’ from ‘calls_free’ |  
| [...] |  |  
|    28 |   calls_free (ptr); /* { dg-message "\\(6\\) passing freed pointer 'ptr' in call to 'calls_free' from 'test'" } */ |  
 |   ~~~~~~~~~~~~~~~~ |  
 |   | |  
 |   (6) passing freed pointer ‘ptr’ in call to ‘calls_free’ from ‘test’ |  
 
 |   
   | 
  
 calls_free 
  | 
     ‘calls_free’: events 7-8 
|     6 | calls_free (void *victim) /* { dg-message "\\(3\\) entry to 'calls_free'" "event 3" } */ |  
 | ^~~~~~~~~~ |  
 | | |  
 | (7) entry to ‘calls_free’ |  
| [...] |  |  
|     9 |   free (victim); /* { dg-warning "double-'free' of 'victim'" "warning" } */ |  
 |   ~~~~~~~~~~~~~ |  
 |   | |  
 |   (8) second ‘free’ here; first ‘free’ was at (4) |  
 
 |   
 |   
 |