diff options
author | Gabor Horvath <xazax.hun@gmail.com> | 2016-12-31 12:45:59 +0000 |
---|---|---|
committer | Gabor Horvath <xazax.hun@gmail.com> | 2016-12-31 12:45:59 +0000 |
commit | 7510d9aa8a94b1985e0ac49ad5be38fcdd3c0667 (patch) | |
tree | 9843af8b13fc55f2409353a056690e2dfe5ad2f1 /clang-tools-extra/test/clang-tidy/readability-delete-null-pointer.cpp | |
parent | 94e5371dde2a9f389ecfb70c91e7011c68d9f8ad (diff) | |
download | bcm5719-llvm-7510d9aa8a94b1985e0ac49ad5be38fcdd3c0667.tar.gz bcm5719-llvm-7510d9aa8a94b1985e0ac49ad5be38fcdd3c0667.zip |
[clang-tidy] Add delete null pointer check.
This check detects and fixes redundant null checks before deletes.
Patch by: Gergely Angeli!
Differential Revision: https://reviews.llvm.org/D21298
llvm-svn: 290784
Diffstat (limited to 'clang-tools-extra/test/clang-tidy/readability-delete-null-pointer.cpp')
-rw-r--r-- | clang-tools-extra/test/clang-tidy/readability-delete-null-pointer.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/readability-delete-null-pointer.cpp b/clang-tools-extra/test/clang-tidy/readability-delete-null-pointer.cpp new file mode 100644 index 00000000000..400714b44d9 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/readability-delete-null-pointer.cpp @@ -0,0 +1,76 @@ +// RUN: %check_clang_tidy %s readability-delete-null-pointer %t + +#define NULL 0 + +void f() { + int *p = 0; + + // #1 + if (p) { // #2 + delete p; + } // #3 + // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: 'if' statement is unnecessary; deleting null pointer has no effect [readability-delete-null-pointer] + + // CHECK-FIXES: {{^ }}// #1 + // CHECK-FIXES-NEXT: {{^ }}// #2 + // CHECK-FIXES-NEXT: delete p; + // CHECK-FIXES-NEXT: {{^ }}// #3 + + int *p2 = new int[3]; + // #4 + if (p2) // #5 + delete[] p2; + // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: 'if' statement is unnecessary; + + // CHECK-FIXES: // #4 + // CHECK-FIXES-NEXT: {{^ }}// #5 + // CHECK-FIXES-NEXT: delete[] p2; + + int *p3 = 0; + if (NULL != p3) { + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary; + delete p3; + } + // CHECK-FIXES-NOT: if (NULL != p3) { + // CHECK-FIXES: delete p3; + + int *p4 = nullptr; + if (p4 != nullptr) { + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary; + delete p4; + } + // CHECK-FIXES-NOT: if (p4 != nullptr) { + // CHECK-FIXES: delete p4; + + char *c; + if (c != 0) { + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary; + delete c; + } + // CHECK-FIXES-NOT: if (c != 0) { + // CHECK-FIXES: delete c; + + char *c2; + if (c2) { + // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: 'if' statement is unnecessary; + // CHECK-FIXES: } else { + // CHECK-FIXES: c2 = c; + delete c2; + } else { + c2 = c; + } +} + +void g() { + int *p5, *p6; + if (p5) + delete p6; + + if (p5 && p6) + delete p5; + + if (p6) { + int x = 5; + delete p6; + } +} |