[clang-tools-extra] r215439 - [clang-tidy] Disable the warning on implicit bool* to bool conversion in macros.

Benjamin Kramer benny.kra at googlemail.com
Tue Aug 12 05:12:57 PDT 2014


Author: d0k
Date: Tue Aug 12 07:12:57 2014
New Revision: 215439

URL: http://llvm.org/viewvc/llvm-project?rev=215439&view=rev
Log:
[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.

Modified:
    clang-tools-extra/trunk/clang-tidy/misc/BoolPointerImplicitConversion.cpp
    clang-tools-extra/trunk/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp

Modified: clang-tools-extra/trunk/clang-tidy/misc/BoolPointerImplicitConversion.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/misc/BoolPointerImplicitConversion.cpp?rev=215439&r1=215438&r2=215439&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/misc/BoolPointerImplicitConversion.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/misc/BoolPointerImplicitConversion.cpp Tue Aug 12 07:12:57 2014
@@ -24,6 +24,9 @@ AST_MATCHER(QualType, isBoolean) { retur
 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::regi
                        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(con
   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

Modified: clang-tools-extra/trunk/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp?rev=215439&r1=215438&r2=215439&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/misc-bool-pointer-implicit-conversion.cpp Tue Aug 12 07:12:57 2014
@@ -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)
 }





More information about the cfe-commits mailing list