On Tue, Aug 12, 2014 at 2:12 PM, Benjamin Kramer <[email protected]> wrote:
> 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())))); > Can you pull isInTemplateInstantiation out to ASTMatchers.h? Manuel seems to think it is the right way to handle this for now. > // 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) > } > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
