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