1 // RUN: %check_clang_tidy %s readability-delete-null-pointer %t
2
3 #define NULL 0
4
f()5 void f() {
6 int *ps = 0;
7 if (ps /**/) // #0
8 delete ps;
9 // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: 'if' statement is unnecessary; deleting null pointer has no effect [readability-delete-null-pointer]
10
11 // CHECK-FIXES: int *ps = 0;
12 // CHECK-FIXES-NEXT: {{^ }}// #0
13 // CHECK-FIXES-NEXT: delete ps;
14
15 int *p = 0;
16
17 // #1
18 if (p) { // #2
19 delete p;
20 } // #3
21 // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: 'if' statement is unnecessary; deleting null pointer has no effect [readability-delete-null-pointer]
22
23 // CHECK-FIXES: {{^ }}// #1
24 // CHECK-FIXES-NEXT: {{^ }}// #2
25 // CHECK-FIXES-NEXT: delete p;
26 // CHECK-FIXES-NEXT: {{^ }}// #3
27
28 int *p2 = new int[3];
29 // #4
30 if (p2) // #5
31 delete[] p2;
32 // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: 'if' statement is unnecessary;
33
34 // CHECK-FIXES: // #4
35 // CHECK-FIXES-NEXT: {{^ }}// #5
36 // CHECK-FIXES-NEXT: delete[] p2;
37
38 int *p3 = 0;
39 if (NULL != p3) {
40 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;
41 delete p3;
42 }
43 // CHECK-FIXES-NOT: if (NULL != p3) {
44 // CHECK-FIXES: delete p3;
45
46 int *p4 = nullptr;
47 if (p4 != nullptr) {
48 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;
49 delete p4;
50 }
51 // CHECK-FIXES-NOT: if (p4 != nullptr) {
52 // CHECK-FIXES: delete p4;
53
54 char *c;
55 if (c != 0) {
56 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;
57 delete c;
58 }
59 // CHECK-FIXES-NOT: if (c != 0) {
60 // CHECK-FIXES: delete c;
61
62 char *c2;
63 if (c2) {
64 // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary;
65 // CHECK-FIXES: } else {
66 // CHECK-FIXES: c2 = c;
67 delete c2;
68 } else {
69 c2 = c;
70 }
71 struct A {
72 void foo() {
73 if (mp) // #6
74 delete mp;
75 // CHECK-MESSAGES: :[[@LINE-2]]:7: warning: 'if' statement is unnecessary; deleting null pointer has no effect [readability-delete-null-pointer]
76 // CHECK-FIXES: {{^ }}// #6
77 // CHECK-FIXES-NEXT: delete mp;
78 }
79 int *mp;
80 };
81 }
82
g()83 void g() {
84 int *p5, *p6;
85 if (p5)
86 delete p6;
87
88 if (p5 && p6)
89 delete p5;
90
91 if (p6) {
92 int x = 5;
93 delete p6;
94 }
95 }
96