| 
  
 test 
  | 
     ‘test’: events 1-2 
|     8 | void test(void *p) |  
 |      ^~~~ |  
 |      | |  
 |      (1) entry to ‘test’ |  
|     9 | { |  
|    10 |   calls_free(p); |  
 |   ~~~~~~~~~~~~~ |  
 |   | |  
 |   (2) calling ‘calls_free’ from ‘test’ |  
 
 |   
   | 
  
 calls_free 
  | 
     ‘calls_free’: events 3-4 
|     3 | static void calls_free(int *q) |  
 |             ^~~~~~~~~~ |  
 |             | |  
 |             (3) entry to ‘calls_free’ |  
|     4 | { |  
|     5 |   free(q); |  
 |   ~~~~~~~     |  
 |   | |  
 |   (4) first ‘free’ here |  
 
 |   
 |   
  | 
     ‘test’: events 5-6 
|    10 |   calls_free(p); |  
 |   ^~~~~~~~~~~~~ |  
 |   | |  
 |   (5) returning to ‘test’ from ‘calls_free’ |  
|    11 |  |  
|    12 |   free(p); /* { dg-warning "double-'free' of 'p'" } */ |  
 |   ~~~~~~~ |  
 |   | |  
 |   (6) second ‘free’ here; first ‘free’ was at (4) |  
 
 |   
 |