[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