summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-tidy
diff options
context:
space:
mode:
authorMalcolm Parsons <malcolm.parsons@gmail.com>2018-11-27 16:23:39 +0000
committerMalcolm Parsons <malcolm.parsons@gmail.com>2018-11-27 16:23:39 +0000
commitd8851b5def462d88924ba53cffe95a149f02d2e8 (patch)
tree7d41a5590b20b081b57642c2020a77fa7dc7aaf5 /clang-tools-extra/clang-tidy
parent14f3e3aa367301608941e3ac4a4b808d8d4f312c (diff)
downloadbcm5719-llvm-d8851b5def462d88924ba53cffe95a149f02d2e8.tar.gz
bcm5719-llvm-d8851b5def462d88924ba53cffe95a149f02d2e8.zip
[clang-tidy] Ignore bool -> single bit bitfield conversion in readability-implicit-bool-conversion
Summary: There is no ambiguity / information loss in this conversion Reviewers: alexfh, aaron.ballman, hokein Reviewed By: alexfh Subscribers: xazax.hun, cfe-commits Differential Revision: https://reviews.llvm.org/D54941 llvm-svn: 347671
Diffstat (limited to 'clang-tools-extra/clang-tidy')
-rw-r--r--clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
index 1cf1d03e825..b8ae224be59 100644
--- a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
@@ -306,6 +306,11 @@ void ImplicitBoolConversionCheck::registerMatchers(MatchFinder *Finder) {
auto boolOpAssignment =
binaryOperator(anyOf(hasOperatorName("|="), hasOperatorName("&=")),
hasLHS(expr(hasType(booleanType()))));
+ auto bitfieldAssignment = binaryOperator(
+ hasLHS(memberExpr(hasDeclaration(fieldDecl(hasBitWidth(1))))));
+ auto bitfieldConstruct = cxxConstructorDecl(hasDescendant(cxxCtorInitializer(
+ withInitializer(equalsBoundNode("implicitCastFromBool")),
+ forField(hasBitWidth(1)))));
Finder->addMatcher(
implicitCastExpr(
implicitCastFromBool,
@@ -313,14 +318,15 @@ void ImplicitBoolConversionCheck::registerMatchers(MatchFinder *Finder) {
// in such context:
// bool_expr_a == bool_expr_b
// bool_expr_a != bool_expr_b
- unless(hasParent(binaryOperator(
- anyOf(boolComparison, boolXor, boolOpAssignment)))),
+ unless(hasParent(binaryOperator(anyOf(
+ boolComparison, boolXor, boolOpAssignment, bitfieldAssignment)))),
+ implicitCastExpr().bind("implicitCastFromBool"),
+ unless(hasParent(bitfieldConstruct)),
// Check also for nested casts, for example: bool -> int -> float.
anyOf(hasParent(implicitCastExpr().bind("furtherImplicitCast")),
anything()),
unless(isInTemplateInstantiation()),
- unless(hasAncestor(functionTemplateDecl())))
- .bind("implicitCastFromBool"),
+ unless(hasAncestor(functionTemplateDecl()))),
this);
}
OpenPOWER on IntegriCloud