#include void __attribute__((noinline)) callee_1 (int *ptr) { *ptr = 42; /* { dg-warning "dereference of possibly-NULL 'ptr'" } */ } int test_1 (int i, int flag) { /* Double diamond CFG; either use &i, or a malloc-ed buffer. */ int *ptr = &i; if (flag) ptr = (int *)malloc (sizeof (int)); callee_1 (ptr); if (flag) free (ptr); return i; } void __attribute__((noinline)) callee_2 (int *ptr) { *ptr = 42; } int test_2 (int flag) { int i; if (flag) callee_2 (&i); callee_2 (&i); if (!flag) { void *ptr = malloc (16); free (ptr); free (ptr); /* { dg-warning "double-'free' of 'ptr'" } */ } }