(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
paths-7.c
       1  #include <stdlib.h>
       2  #include "analyzer-decls.h"
       3  
       4  extern int foo (int);
       5  
       6  int test (int flag, void *ptr, int *p, int n)
       7  {
       8    int result;
       9    int sum = 0;
      10    int i;
      11  
      12    __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
      13  
      14    if (flag)
      15      free (ptr);
      16  
      17    __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
      18  
      19    for (i = 0; i < n; i++)
      20      p[i] = i;
      21    for (i = 0; i < n; i++)
      22      sum += foo (p[i]); /* { dg-bogus "uninitialized" } */
      23    result = sum;
      24  
      25    __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
      26  
      27    if (flag)
      28      free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
      29    return result;
      30  }
      31  
      32  int test_2 (int flag, int *p, int n)
      33  {
      34    int result;
      35    int sum = 0;
      36    int i;
      37  
      38    void *ptr = malloc (16);
      39  
      40    __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
      41  
      42    if (flag)
      43      free (ptr);
      44  
      45    __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
      46  
      47    for (i = 0; i < n; i++)
      48      p[i] = i;
      49    for (i = 0; i < n; i++)
      50      sum += foo (p[i]); /* { dg-bogus "uninitialized" } */
      51    result = sum;
      52  
      53    __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
      54  
      55    free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
      56    return result;
      57  }