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