[clang-tools-extra] e1ba724 - [clang-tidy] simplify-bool-expr ignores template instantiations
Nathan James via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 16 05:54:57 PDT 2020
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>();
+}
More information about the cfe-commits
mailing list