1 void f(int *p);
2 
testUseMiddleArgAfterDelete(int * p)3 void testUseMiddleArgAfterDelete(int *p) {
4   delete p;
5   f(p); // warn: use after free
6 }
7 
8 class SomeClass {
9 public:
10   void f();
11 };
12 
test()13 void test() {
14   SomeClass *c = new SomeClass;
15   delete c;
16   c->f(); // warn: use after free
17 }
18 
test()19 void test() {
20   int *p = (int *)__builtin_alloca(sizeof(int));
21   delete p; // warn: deleting memory allocated by alloca
22 }
23 
test()24 void test() {
25   int *p = new int;
26   delete p;
27   delete p; // warn: attempt to free released
28 }
29 
test()30 void test() {
31   int i;
32   delete &i; // warn: delete address of local
33 }
34 
test()35 void test() {
36   int *p = new int[1];
37   delete[] (++p);
38     // warn: argument to 'delete[]' is offset by 4 bytes
39     // from the start of memory allocated by 'new[]'
40 }
41 
42