Author: alexfh Date: Mon May 8 10:22:09 2017 New Revision: 302431 URL: http://llvm.org/viewvc/llvm-project?rev=302431&view=rev Log: [clang-tidy] Fix readability-implicit-bool-cast false positives
The patch makes the check treat binary conditional operator (`x ?: y`), `while` and regular `for` loops as conditional statements for the purpose of AllowConditional*Cast options. Modified: clang-tools-extra/trunk/clang-tidy/readability/ImplicitBoolCastCheck.cpp clang-tools-extra/trunk/test/clang-tidy/readability-implicit-bool-cast-allow-conditional-casts.cpp Modified: clang-tools-extra/trunk/clang-tidy/readability/ImplicitBoolCastCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/ImplicitBoolCastCheck.cpp?rev=302431&r1=302430&r2=302431&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/ImplicitBoolCastCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/ImplicitBoolCastCheck.cpp Mon May 8 10:22:09 2017 @@ -227,7 +227,8 @@ bool isAllowedConditionalCast(const Impl const Stmt *S = N.get<Stmt>(); if (!S) return false; - if (isa<IfStmt>(S) || isa<ConditionalOperator>(S)) + if (isa<IfStmt>(S) || isa<ConditionalOperator>(S) || isa<ForStmt>(S) || + isa<WhileStmt>(S) || isa<BinaryConditionalOperator>(S)) return true; if (isa<ParenExpr>(S) || isa<ImplicitCastExpr>(S) || isUnaryLogicalNotOperator(S) || Modified: clang-tools-extra/trunk/test/clang-tidy/readability-implicit-bool-cast-allow-conditional-casts.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-implicit-bool-cast-allow-conditional-casts.cpp?rev=302431&r1=302430&r2=302431&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-implicit-bool-cast-allow-conditional-casts.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/readability-implicit-bool-cast-allow-conditional-casts.cpp Mon May 8 10:22:09 2017 @@ -27,9 +27,17 @@ void implicitCastIntegerToBoolInConditio if (!functionReturningInt()) {} if (functionReturningInt() && functionReturningPointer()) {} if (!functionReturningInt() && !functionReturningPointer()) {} + for (; functionReturningInt(); ) {} + for (; functionReturningPointer(); ) {} + for (; functionReturningInt() && !functionReturningPointer() || (!functionReturningInt() && functionReturningPointer()); ) {} + while (functionReturningInt()) {} + while (functionReturningPointer()) {} + while (functionReturningInt() && !functionReturningPointer() || (!functionReturningInt() && functionReturningPointer())) {} int value1 = functionReturningInt() ? 1 : 2; int value2 = !functionReturningInt() ? 1 : 2; int value3 = (functionReturningInt() && functionReturningPointer() || !functionReturningInt()) ? 1 : 2; + int value4 = functionReturningInt() ?: value3; + int *p1 = functionReturningPointer() ?: &value3; } void regularImplicitCastPointerToBoolIsNotIgnored() { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits