diff options
author | Piotr Padlewski <piotr.padlewski@gmail.com> | 2016-05-31 15:26:56 +0000 |
---|---|---|
committer | Piotr Padlewski <piotr.padlewski@gmail.com> | 2016-05-31 15:26:56 +0000 |
commit | e93a73fb7aa49d04f1109e6c3c69530ea6d81d31 (patch) | |
tree | 11aca431300988da1967aee59494d6e2b06d4eb1 /clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp | |
parent | cfed2bf5881597a05a1abab446b96bb8d3adb33a (diff) | |
download | bcm5719-llvm-e93a73fb7aa49d04f1109e6c3c69530ea6d81d31.tar.gz bcm5719-llvm-e93a73fb7aa49d04f1109e6c3c69530ea6d81d31.zip |
[ASTMatchers] Added ignoringParenImpCasts to has matchers
has matcher changed behaviour, and now it matches "as is" and
doesn't skip implicit and paren casts
http://reviews.llvm.org/D20801
llvm-svn: 271289
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp')
-rw-r--r-- | clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp b/clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp index d9040ad0ed7..ed2527e42cf 100644 --- a/clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp @@ -103,15 +103,17 @@ void DanglingHandleCheck::registerMatchersForVariables(MatchFinder *Finder) { Finder->addMatcher( varDecl(hasType(cxxRecordDecl(IsAHandle)), hasInitializer( - exprWithCleanups(has(ConvertedHandle)).bind("bad_stmt"))), + exprWithCleanups(has(ignoringParenImpCasts(ConvertedHandle))) + .bind("bad_stmt"))), this); // Find 'Handle foo = ReturnsAValue();' Finder->addMatcher( - varDecl(hasType(cxxRecordDecl(IsAHandle)), unless(parmVarDecl()), - hasInitializer( - exprWithCleanups(has(handleFrom(IsAHandle, ConvertedHandle))) - .bind("bad_stmt"))), + varDecl( + hasType(cxxRecordDecl(IsAHandle)), unless(parmVarDecl()), + hasInitializer(exprWithCleanups(has(ignoringParenImpCasts(handleFrom( + IsAHandle, ConvertedHandle)))) + .bind("bad_stmt"))), this); // Find 'foo = ReturnsAValue(); // foo is Handle' Finder->addMatcher( @@ -133,7 +135,7 @@ void DanglingHandleCheck::registerMatchersForReturn(MatchFinder *Finder) { // 1. Value to Handle conversion. // 2. Handle copy construction. // We have to match both. - has(handleFrom( + has(ignoringParenImpCasts(handleFrom( IsAHandle, handleFrom(IsAHandle, declRefExpr(to(varDecl( // Is function scope ... @@ -141,7 +143,7 @@ void DanglingHandleCheck::registerMatchersForReturn(MatchFinder *Finder) { // ... and it is a local array or Value. anyOf(hasType(arrayType()), hasType(recordDecl( - unless(IsAHandle)))))))))), + unless(IsAHandle))))))))))), // Temporary fix for false positives inside lambdas. unless(hasAncestor(lambdaExpr()))) .bind("bad_stmt"), @@ -149,8 +151,9 @@ void DanglingHandleCheck::registerMatchersForReturn(MatchFinder *Finder) { // Return a temporary. Finder->addMatcher( - returnStmt(has(exprWithCleanups(has(handleFrom( - IsAHandle, handleFromTemporaryValue(IsAHandle)))))) + returnStmt( + has(ignoringParenImpCasts(exprWithCleanups(has(ignoringParenImpCasts( + handleFrom(IsAHandle, handleFromTemporaryValue(IsAHandle)))))))) .bind("bad_stmt"), this); } |