void f(int *p); void testUseMiddleArgAfterDelete(int *p) { delete p; f(p); // warn: use after free } class SomeClass { public: void f(); }; void test() { SomeClass *c = new SomeClass; delete c; c->f(); // warn: use after free } void test() { int *p = (int *)__builtin_alloca(sizeof(int)); delete p; // warn: deleting memory allocated by alloca } void test() { int *p = new int; delete p; delete p; // warn: attempt to free released } void test() { int i; delete &i; // warn: delete address of local } void test() { int *p = new int[1]; delete[] (++p); // warn: argument to 'delete[]' is offset by 4 bytes // from the start of memory allocated by 'new[]' }