1*06f32e7eSjoerg // C, C++ test()2*06f32e7eSjoergvoid test() { 3*06f32e7eSjoerg int *p = (int *)malloc(sizeof(int)); 4*06f32e7eSjoerg delete p; // warn 5*06f32e7eSjoerg } 6*06f32e7eSjoerg 7*06f32e7eSjoerg // C, C++ 8*06f32e7eSjoerg void __attribute((ownership_returns(malloc))) *user_malloc(size_t); 9*06f32e7eSjoerg test()10*06f32e7eSjoergvoid test() { 11*06f32e7eSjoerg int *p = (int *)user_malloc(sizeof(int)); 12*06f32e7eSjoerg delete p; // warn 13*06f32e7eSjoerg } 14*06f32e7eSjoerg 15*06f32e7eSjoerg // C, C++ test()16*06f32e7eSjoergvoid test() { 17*06f32e7eSjoerg int *p = new int; 18*06f32e7eSjoerg free(p); // warn 19*06f32e7eSjoerg } 20*06f32e7eSjoerg 21*06f32e7eSjoerg // C, C++ test()22*06f32e7eSjoergvoid test() { 23*06f32e7eSjoerg int *p = new int[1]; 24*06f32e7eSjoerg realloc(p, sizeof(long)); // warn 25*06f32e7eSjoerg } 26*06f32e7eSjoerg 27*06f32e7eSjoerg // C, C++ 28*06f32e7eSjoerg template <typename T> 29*06f32e7eSjoerg struct SimpleSmartPointer { 30*06f32e7eSjoerg T *ptr; 31*06f32e7eSjoerg SimpleSmartPointerSimpleSmartPointer32*06f32e7eSjoerg explicit SimpleSmartPointer(T *p = 0) : ptr(p) {} ~SimpleSmartPointerSimpleSmartPointer33*06f32e7eSjoerg ~SimpleSmartPointer() { 34*06f32e7eSjoerg delete ptr; // warn 35*06f32e7eSjoerg } 36*06f32e7eSjoerg }; 37*06f32e7eSjoerg test()38*06f32e7eSjoergvoid test() { 39*06f32e7eSjoerg SimpleSmartPointer<int> a((int *)malloc(4)); 40*06f32e7eSjoerg } 41*06f32e7eSjoerg 42*06f32e7eSjoerg // C++ test()43*06f32e7eSjoergvoid test() { 44*06f32e7eSjoerg int *p = (int *)operator new(0); 45*06f32e7eSjoerg delete[] p; // warn 46*06f32e7eSjoerg } 47*06f32e7eSjoerg 48*06f32e7eSjoerg // Objective-C, C++ test(NSUInteger dataLength)49*06f32e7eSjoergvoid test(NSUInteger dataLength) { 50*06f32e7eSjoerg int *p = new int; 51*06f32e7eSjoerg NSData *d = [NSData dataWithBytesNoCopy:p 52*06f32e7eSjoerg length:sizeof(int) freeWhenDone:1]; 53*06f32e7eSjoerg // warn +dataWithBytesNoCopy:length:freeWhenDone: cannot take 54*06f32e7eSjoerg // ownership of memory allocated by 'new' 55*06f32e7eSjoerg } 56*06f32e7eSjoerg 57