#include #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; }