1  #include <stdlib.h>
       2  #include "analyzer-decls.h"
       3  
       4  extern void might_realloc (void *);
       5  extern void cant_realloc (const void *);
       6  
       7  void *
       8  test_realloc_1 (void *p, size_t new_sz)
       9  {
      10    void *q = realloc (p, new_sz);
      11    __analyzer_dump_capacity (q); /* { dg-warning "capacity: 'UNKNOWN\\(sizetype\\)'" "failure" } */
      12    /* { dg-warning "capacity: 'INIT_VAL\\(new_sz\[^\n\r\]*\\)'" "success" { target *-*-* } .-1 } */
      13    return q;
      14  }
      15  
      16  void *
      17  test_realloc_2 (size_t sz_a, size_t sz_b)
      18  {
      19    void *p = malloc (sz_a);
      20    __analyzer_dump_capacity (p); /* { dg-warning "capacity: 'INIT_VAL\\(sz_a_\[^\n\r\]*\\)'" } */
      21    void *q = realloc (p, sz_b);
      22    __analyzer_dump_capacity (q); /* { dg-warning "capacity: 'UNKNOWN\\(sizetype\\)'" "failure" } */
      23    /* { dg-warning "capacity: 'INIT_VAL\\(sz_b\[^\n\r\]*\\)'" "success" { target *-*-* } .-1 } */
      24    return q; /* { dg-warning "leak of 'p'" } */
      25  }
      26  
      27  void *
      28  test_might_realloc (void)
      29  {
      30    void *p = malloc (1024);
      31  
      32    __analyzer_dump_capacity (p); /* { dg-warning "capacity: '\\(size_t\\)1024'" } */
      33  
      34    might_realloc (p);
      35  
      36    __analyzer_dump_capacity (p); /* { dg-warning "capacity: 'UNKNOWN\\(sizetype\\)'" } */
      37  
      38    return p;
      39  }
      40  
      41  void *
      42  test_cant_realloc (void)
      43  {
      44    void *p = malloc (1024);
      45  
      46    __analyzer_dump_capacity (p); /* { dg-warning "capacity: '\\(size_t\\)1024'" } */
      47  
      48    cant_realloc (p);
      49  
      50    __analyzer_dump_capacity (p); /* { dg-warning "capacity: '\\(size_t\\)1024'" } */
      51  
      52    return p;
      53  }
      54  
      55