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