| 
  
 a5 
  | 
     ‘a5’: events 1-2 
|    16 | void a5 (void) |  
 |      ^~ |  
 |      | |  
 |      (1) entry to ‘a5’ |  
| [...] |  |  
|    19 |   hv (&qb); |  
 |   ~~~~~~~~ |  
 |   | |  
 |   (2) calling ‘hv’ from ‘a5’ |  
 
 |   
   | 
  
 hv 
  | 
     ‘hv’: events 3-7 
|     7 | void *hv (struct foo **tm) |  
 |       ^~ |  
 |       | |  
 |       (3) entry to ‘hv’ |  
|     8 | { |  
|     9 |   void *p = __builtin_malloc (4); |  
 |             ~~~~~~~~~~~~~~~~~~~~ |  
 |             | |  
 |             (4) allocated here |  
|    10 |   *tm = p; |  
|    11 |   if (!p) |  
 |      ~  |  
 |      | |  
 |      (5) assuming ‘qb’ is non-NULL |  
 |      (6) following ‘false’ branch (when ‘p’ is non-NULL)... |  
|    12 |     abort (); |  
|    13 |   return p; |  
 |          ~ |  
 |          | |  
 |          (7) ...to here |  
 
 |   
 |   
  | 
     ‘a5’: events 8-9 
|    19 |   hv (&qb); |  
 |   ^~~~~~~~ |  
 |   | |  
 |   (8) returning to ‘a5’ from ‘hv’ |  
|    20 | } /* { dg-warning "leak of 'qb'" } */ |  
 | ~   |  
 | | |  
 | (9) ‘qb’ leaks here; was allocated at (4) |  
 
 |   
 |