1void f(int *p); 2 3void testUseMiddleArgAfterDelete(int *p) { 4 delete p; 5 f(p); // warn: use after free 6} 7 8class SomeClass { 9public: 10 void f(); 11}; 12 13void test() { 14 SomeClass *c = new SomeClass; 15 delete c; 16 c->f(); // warn: use after free 17} 18 19void test() { 20 int *p = (int *)__builtin_alloca(sizeof(int)); 21 delete p; // warn: deleting memory allocated by alloca 22} 23 24void test() { 25 int *p = new int; 26 delete p; 27 delete p; // warn: attempt to free released 28} 29 30void test() { 31 int i; 32 delete &i; // warn: delete address of local 33} 34 35void 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