42 lines · cpp
1void f(int *p);2 3void testUseMiddleArgAfterDelete(int *p) {4 delete p;5 f(p); // warn: use after free6}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 free17}18 19void test() {20 int *p = (int *)__builtin_alloca(sizeof(int));21 delete p; // warn: deleting memory allocated by alloca22}23 24void test() {25 int *p = new int;26 delete p;27 delete p; // warn: attempt to free released28}29 30void test() {31 int i;32 delete &i; // warn: delete address of local33}34 35void test() {36 int *p = new int[1];37 delete[] (++p);38 // warn: argument to 'delete[]' is offset by 4 bytes39 // from the start of memory allocated by 'new[]'40}41 42