brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 1a37c2b Raw
159 lines · cpp
1// RUN: %check_clang_tidy %s readability-delete-null-pointer %t -- -- -fno-delayed-template-parsing2 3#define NULL 04 5template <typename T>6struct Templ {7  void foo() {8    // t19    if (mem) // t210      delete mem;11    // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: 'if' statement is unnecessary;12    // CHECK-FIXES: // t113    // CHECK-FIXES-NEXT: // t214    // CHECK-FIXES-NEXT: delete mem;15  }16  T mem;17};18 19template <typename T>20struct TemplPtr {21  void foo() {22    // t323    if (mem) // t424      delete mem;25    // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: 'if' statement is unnecessary;26    // CHECK-FIXES: // t327    // CHECK-FIXES-NEXT: // t428    // CHECK-FIXES-NEXT: delete mem;29  }30  T *mem;31};32 33void instantiate() {34  Templ<int *> ti2;35  ti2.foo();36  TemplPtr<int> ti3;37  ti3.foo();38}39 40template <typename T>41struct NeverInstantiated {42  void foo() {43    // t144    if (mem) // t245      delete mem;46    // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: 'if' statement is unnecessary;47    // CHECK-FIXES: // t148    // CHECK-FIXES-NEXT: // t249    // CHECK-FIXES-NEXT: delete mem;50  }51  T mem;52};53 54template <typename T>55struct NeverInstantiatedPtr {56  void foo() {57    // t358    if (mem) // t459      delete mem;60    // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: 'if' statement is unnecessary;61    // CHECK-FIXES: // t362    // CHECK-FIXES-NEXT: // t463    // CHECK-FIXES-NEXT: delete mem;64  }65  T *mem;66};67 68void f() {69  int *ps = 0;70  if (ps /**/) // #071    delete ps;72  // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: 'if' statement is unnecessary; deleting null pointer has no effect [readability-delete-null-pointer]73 74  // CHECK-FIXES: int *ps = 0;75  // CHECK-FIXES-NEXT: // #076  // CHECK-FIXES-NEXT: delete ps;77 78  int *p = 0;79 80  // #181  if (p) { // #282    delete p;83  } // #384  // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: 'if' statement is unnecessary; deleting null pointer has no effect [readability-delete-null-pointer]85 86  // CHECK-FIXES: // #187  // CHECK-FIXES-NEXT: // #288  // CHECK-FIXES-NEXT: delete p;89  // CHECK-FIXES-NEXT: // #390 91  int *p2 = new int[3];92  // #493  if (p2) // #594    delete[] p2;95  // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: 'if' statement is unnecessary;96 97  // CHECK-FIXES: // #498  // CHECK-FIXES-NEXT: // #599  // CHECK-FIXES-NEXT: delete[] p2;100 101  int *p3 = 0;102  if (NULL != p3) {103    // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;104    delete p3;105  }106  // CHECK-FIXES-NOT: if (NULL != p3) {107  // CHECK-FIXES: delete p3;108 109  int *p4 = nullptr;110  if (p4 != nullptr) {111    // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;112    delete p4;113  }114  // CHECK-FIXES-NOT: if (p4 != nullptr) {115  // CHECK-FIXES: delete p4;116 117  char *c;118  if (c != 0) {119    // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;120    delete c;121  }122  // CHECK-FIXES-NOT: if (c != 0) {123  // CHECK-FIXES: delete c;124 125  char *c2;126  if (c2) {127    // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;128    // CHECK-FIXES: } else {129    // CHECK-FIXES: c2 = c;130    delete c2;131  } else {132    c2 = c;133  }134  struct A {135    void foo() {136      if (mp) // #6137        delete mp;138      // CHECK-MESSAGES: :[[@LINE-2]]:7: warning: 'if' statement is unnecessary; deleting null pointer has no effect [readability-delete-null-pointer]139      // CHECK-FIXES: // #6140      // CHECK-FIXES-NEXT: delete mp;141    }142    int *mp;143  };144}145 146void g() {147  int *p5, *p6;148  if (p5)149    delete p6;150 151  if (p5 && p6)152    delete p5;153 154  if (p6) {155    int x = 5;156    delete p6;157  }158}159