summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2014-08-12 12:12:57 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2014-08-12 12:12:57 +0000
commit242b5b808b52e11c651543d1555ee3c87f32a4d7 (patch)
treef4f459e42768f8cfc386c4b28c2326d25745a96d
parent6318f7614f748acba9d8acb5b53e7a2df42aaa47 (diff)
downloadbcm5719-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
-rw-r--r--clang-tools-extra/clang-tidy/misc/BoolPointerImplicitConversion.cpp10
-rw-r--r--clang-tools-extra/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp7
2 files changed, 12 insertions, 5 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
diff --git a/clang-tools-extra/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp b/clang-tools-extra/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp
index ab3cf1cd49b..2a27e6cd87a 100644
--- a/clang-tools-extra/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp
+++ b/clang-tools-extra/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp
@@ -33,10 +33,6 @@ void foo() {
#define TESTMACRO if (b || F())
TESTMACRO {
-// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: dubious check of 'bool *' against 'nullptr'
-// Can't fix this.
-// CHECK-FIXES: #define TESTMACRO if (b || F())
-// CHECK-FIXES: TESTMACRO {
}
t(b);
@@ -81,4 +77,7 @@ void foo() {
if (d.b)
(void)*d.b; // no-warning
+
+#define CHECK(b) if (b) {}
+ CHECK(c)
}
OpenPOWER on IntegriCloud