Author: Nathan James Date: 2020-06-16T13:54:48+01:00 New Revision: e1ba7241c3efc3a36439a6f80a7367c26cc193b1
URL: https://github.com/llvm/llvm-project/commit/e1ba7241c3efc3a36439a6f80a7367c26cc193b1 DIFF: https://github.com/llvm/llvm-project/commit/e1ba7241c3efc3a36439a6f80a7367c26cc193b1.diff LOG: [clang-tidy] simplify-bool-expr ignores template instantiations Ignore template instantiations in the matchers, Addresses [[ https://bugs.llvm.org/show_bug.cgi?id=46226 | readability-simplify-boolean-expr false-positive for bool from template. ]] Reviewed By: aaron.ballman, lebedev.ri Differential Revision: https://reviews.llvm.org/D81336 Added: Modified: clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp clang-tools-extra/test/clang-tidy/checkers/readability-simplify-bool-expr.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp b/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp index fb33e50cb1ca..4c83499ff7ca 100644 --- a/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/SimplifyBooleanExprCheck.cpp @@ -422,7 +422,7 @@ void SimplifyBooleanExprCheck::matchBoolCondition(MatchFinder *Finder, bool Value, StringRef BooleanId) { Finder->addMatcher( - ifStmt(isExpansionInMainFile(), + ifStmt(unless(isInTemplateInstantiation()), hasCondition(cxxBoolLiteral(equals(Value)).bind(BooleanId))) .bind(IfStmtId), this); @@ -432,7 +432,7 @@ void SimplifyBooleanExprCheck::matchTernaryResult(MatchFinder *Finder, bool Value, StringRef TernaryId) { Finder->addMatcher( - conditionalOperator(isExpansionInMainFile(), + conditionalOperator(unless(isInTemplateInstantiation()), hasTrueExpression(cxxBoolLiteral(equals(Value))), hasFalseExpression(cxxBoolLiteral(equals(!Value)))) .bind(TernaryId), @@ -442,13 +442,13 @@ void SimplifyBooleanExprCheck::matchTernaryResult(MatchFinder *Finder, void SimplifyBooleanExprCheck::matchIfReturnsBool(MatchFinder *Finder, bool Value, StringRef Id) { if (ChainedConditionalReturn) - Finder->addMatcher(ifStmt(isExpansionInMainFile(), + Finder->addMatcher(ifStmt(unless(isInTemplateInstantiation()), hasThen(returnsBool(Value, ThenLiteralId)), hasElse(returnsBool(!Value))) .bind(Id), this); else - Finder->addMatcher(ifStmt(isExpansionInMainFile(), + Finder->addMatcher(ifStmt(unless(isInTemplateInstantiation()), unless(hasParent(ifStmt())), hasThen(returnsBool(Value, ThenLiteralId)), hasElse(returnsBool(!Value))) @@ -474,12 +474,16 @@ void SimplifyBooleanExprCheck::matchIfAssignsBool(MatchFinder *Finder, auto Else = anyOf(SimpleElse, compoundStmt(statementCountIs(1), hasAnySubstatement(SimpleElse))); if (ChainedConditionalAssignment) - Finder->addMatcher(ifStmt(hasThen(Then), hasElse(Else)).bind(Id), this); + Finder->addMatcher(ifStmt(unless(isInTemplateInstantiation()), + hasThen(Then), hasElse(Else)) + .bind(Id), + this); else - Finder->addMatcher( - ifStmt(unless(hasParent(ifStmt())), hasThen(Then), hasElse(Else)) - .bind(Id), - this); + Finder->addMatcher(ifStmt(unless(isInTemplateInstantiation()), + unless(hasParent(ifStmt())), hasThen(Then), + hasElse(Else)) + .bind(Id), + this); } void SimplifyBooleanExprCheck::matchCompoundIfReturnsBool(MatchFinder *Finder, @@ -487,6 +491,7 @@ void SimplifyBooleanExprCheck::matchCompoundIfReturnsBool(MatchFinder *Finder, StringRef Id) { Finder->addMatcher( compoundStmt( + unless(isInTemplateInstantiation()), hasAnySubstatement( ifStmt(hasThen(returnsBool(Value)), unless(hasElse(stmt())))), hasAnySubstatement(returnStmt(has(ignoringParenImpCasts( diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability-simplify-bool-expr.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability-simplify-bool-expr.cpp index cd93c5d4be76..3f49eec4c88a 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability-simplify-bool-expr.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability-simplify-bool-expr.cpp @@ -948,3 +948,18 @@ bool expr_with_cleanups(A &S) { } // CHECK-MESSAGES: :[[@LINE-4]]:12: warning: {{.*}} in conditional return // CHECK-FIXES: S == (A)S;{{$}} + +template <bool B> +void ignoreInstantiations() { + if (B) { + return; + } else { + return; + } +} + +void instantiate() { + // Just make sure the check isn't fooled by template instantiations. + ignoreInstantiations<true>(); + ignoreInstantiations<false>(); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits