summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp
diff options
context:
space:
mode:
authorPiotr Padlewski <piotr.padlewski@gmail.com>2016-05-31 15:26:56 +0000
committerPiotr Padlewski <piotr.padlewski@gmail.com>2016-05-31 15:26:56 +0000
commite93a73fb7aa49d04f1109e6c3c69530ea6d81d31 (patch)
tree11aca431300988da1967aee59494d6e2b06d4eb1 /clang-tools-extra/clang-tidy/misc/DanglingHandleCheck.cpp
parentcfed2bf5881597a05a1abab446b96bb8d3adb33a (diff)
downloadbcm5719-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.cpp21
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);
}
OpenPOWER on IntegriCloud