diff options
Diffstat (limited to 'clang-tools-extra/clang-tidy/readability/DeleteNullPointerCheck.cpp')
-rw-r--r-- | clang-tools-extra/clang-tidy/readability/DeleteNullPointerCheck.cpp | 19 |
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); } |