diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2014-08-12 12:12:57 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2014-08-12 12:12:57 +0000 |
commit | 242b5b808b52e11c651543d1555ee3c87f32a4d7 (patch) | |
tree | f4f459e42768f8cfc386c4b28c2326d25745a96d /clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversion.cpp | |
parent | 6318f7614f748acba9d8acb5b53e7a2df42aaa47 (diff) | |
download | bcm5719-llvm-242b5b808b52e11c651543d1555ee3c87f32a4d7.tar.gz bcm5719-llvm-242b5b808b52e11c651543d1555ee3c87f32a4d7.zip |
[clang-tidy] Disable the warning on implicit bool* to bool conversion in macros.
It's just too noisy and the warning isn't very helpful in those cases.
llvm-svn: 215439
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversion.cpp')
-rw-r--r-- | clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversion.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversion.cpp b/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversion.cpp index 6565874a340..c745366cf44 100644 --- a/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversion.cpp +++ b/clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversion.cpp @@ -24,6 +24,9 @@ AST_MATCHER(QualType, isBoolean) { return Node->isBooleanType(); } namespace tidy { void BoolPointerImplicitConversion::registerMatchers(MatchFinder *Finder) { + auto InTemplateInstantiation = hasAncestor( + decl(anyOf(recordDecl(ast_matchers::isTemplateInstantiation()), + functionDecl(ast_matchers::isTemplateInstantiation())))); // Look for ifs that have an implicit bool* to bool conversion in the // condition. Filter negations. Finder->addMatcher( @@ -32,7 +35,8 @@ void BoolPointerImplicitConversion::registerMatchers(MatchFinder *Finder) { hasSourceExpression(expr( hasType(pointerType(pointee(isBoolean()))), ignoringParenImpCasts(declRefExpr().bind("expr")))), - isPointerToBoolean()))))).bind("if"), + isPointerToBoolean())))), + unless(InTemplateInstantiation)).bind("if"), this); } @@ -41,6 +45,10 @@ BoolPointerImplicitConversion::check(const MatchFinder::MatchResult &Result) { auto *If = Result.Nodes.getStmtAs<IfStmt>("if"); auto *Var = Result.Nodes.getStmtAs<DeclRefExpr>("expr"); + // Ignore macros. + if (Var->getLocStart().isMacroID()) + return; + // Only allow variable accesses for now, no function calls or member exprs. // Check that we don't dereference the variable anywhere within the if. This // avoids false positives for checks of the pointer for nullptr before it is |