summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/readability/DeleteNullPointerCheck.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clang-tidy/readability/DeleteNullPointerCheck.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/readability/DeleteNullPointerCheck.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/clang-tools-extra/clang-tidy/readability/DeleteNullPointerCheck.cpp b/clang-tools-extra/clang-tidy/readability/DeleteNullPointerCheck.cpp
index fc2bc503ee2..81ef3913247 100644
--- a/clang-tools-extra/clang-tidy/readability/DeleteNullPointerCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/DeleteNullPointerCheck.cpp
@@ -24,8 +24,15 @@ void DeleteNullPointerCheck::registerMatchers(MatchFinder *Finder) {
to(decl(equalsBoundNode("deletedPointer"))))))))
.bind("deleteExpr");
- const auto PointerExpr =
- ignoringImpCasts(declRefExpr(to(decl().bind("deletedPointer"))));
+ const auto DeleteMemberExpr =
+ cxxDeleteExpr(has(castExpr(has(memberExpr(hasDeclaration(
+ fieldDecl(equalsBoundNode("deletedMemberPointer"))))))))
+ .bind("deleteMemberExpr");
+
+ const auto PointerExpr = ignoringImpCasts(anyOf(
+ declRefExpr(to(decl().bind("deletedPointer"))),
+ memberExpr(hasDeclaration(fieldDecl().bind("deletedMemberPointer")))));
+
const auto PointerCondition = castExpr(hasCastKind(CK_PointerToBoolean),
hasSourceExpression(PointerExpr));
const auto BinaryPointerCheckCondition =
@@ -34,9 +41,11 @@ void DeleteNullPointerCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
ifStmt(hasCondition(anyOf(PointerCondition, BinaryPointerCheckCondition)),
- hasThen(anyOf(DeleteExpr,
- compoundStmt(has(DeleteExpr), statementCountIs(1))
- .bind("compound"))))
+ hasThen(anyOf(
+ DeleteExpr, DeleteMemberExpr,
+ compoundStmt(has(anyOf(DeleteExpr, DeleteMemberExpr)),
+ statementCountIs(1))
+ .bind("compound"))))
.bind("ifWithDelete"),
this);
}
OpenPOWER on IntegriCloud