#include <stdlib.h>
#include "analyzer-decls.h"

extern int foo (int);

int test (int flag, void *ptr, int *p, int n)
{
  int result;
  int sum = 0;
  int i;

  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */

  if (flag)
    free (ptr);

  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */

  for (i = 0; i < n; i++)
    p[i] = i;
  for (i = 0; i < n; i++)
    sum += foo (p[i]); /* { dg-bogus "uninitialized" } */
  result = sum;

  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */

  if (flag)
    free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
  return result;
}

int test_2 (int flag, int *p, int n)
{
  int result;
  int sum = 0;
  int i;

  void *ptr = malloc (16);

  __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */

  if (flag)
    free (ptr);

  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */

  for (i = 0; i < n; i++)
    p[i] = i;
  for (i = 0; i < n; i++)
    sum += foo (p[i]); /* { dg-bogus "uninitialized" } */
  result = sum;

  __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */

  free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */
  return result;
}
