[clang-tools-extra] 513f34a - [clang-tidy] Fix an edge case in readability-implicit-bool-conversion (#186234)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 16 01:07:05 PDT 2026
Author: Eduard Voronkin
Date: 2026-03-16T16:07:00+08:00
New Revision: 513f34a62b337924051887a1c63dc57d02c48656
URL: https://github.com/llvm/llvm-project/commit/513f34a62b337924051887a1c63dc57d02c48656
DIFF: https://github.com/llvm/llvm-project/commit/513f34a62b337924051887a1c63dc57d02c48656.diff
LOG: [clang-tidy] Fix an edge case in readability-implicit-bool-conversion (#186234)
Fix a FP for condition expressions wrapped by `ExprWithCleanups`.
Co-authored-by: EugeneZelenko <eugene.zelenko at gmail.com>
Co-authored-by: Zeyi Xu <zeyi2 at nekoarch.cc>
Added:
Modified:
clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-allow-in-conditions.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
index a0b15603b36e8..a138d1900b799 100644
--- a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
@@ -233,7 +233,7 @@ static bool isCastAllowedInCondition(const ImplicitCastExpr *Cast,
isa<BinaryConditionalOperator>(S))
return true;
if (isa<ParenExpr>(S) || isa<ImplicitCastExpr>(S) ||
- isUnaryLogicalNotOperator(S) ||
+ isa<ExprWithCleanups>(S) || isUnaryLogicalNotOperator(S) ||
(isa<BinaryOperator>(S) && cast<BinaryOperator>(S)->isLogicalOp())) {
Q.push(S);
} else {
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 059e48b512adf..c9a170a9e8660 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -363,6 +363,13 @@ Changes in existing checks
now uses separate note diagnostics for each uninitialized enumerator, making
it easier to see which specific enumerators need explicit initialization.
+- Improved :doc:`readability-implicit-bool-conversion
+ <clang-tidy/checks/readability/implicit-bool-conversion>` check by fixing a
+ false positive where `AllowPointerConditions` and `AllowIntegerConditions`
+ options did not suppress warnings when the condition expression involved
+ temporaries (e.g. passing a string literal to a ``const std::string&``
+ parameter)
+
- Improved :doc:`readability-non-const-parameter
<clang-tidy/checks/readability/non-const-parameter>` check by avoiding false
positives on parameters used in dependent expressions (e.g. inside generic
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-allow-in-conditions.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-allow-in-conditions.cpp
index ef591940917cd..3c9e14449e366 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-allow-in-conditions.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion-allow-in-conditions.cpp
@@ -3,11 +3,14 @@
// RUN: {readability-implicit-bool-conversion.AllowIntegerConditions: true, \
// RUN: readability-implicit-bool-conversion.AllowPointerConditions: true}}'
+#include <string>
+
template<typename T>
void functionTaking(T);
int functionReturningInt();
int* functionReturningPointer();
+void* functionReturningPointerWithStringArg(const std::string&);
struct Struct {
int member;
@@ -74,4 +77,9 @@ void implicitConversionPointerToBoolInConditionalsIsAllowed() {
if (memberPointer) {}
int value3 = memberPointer ? 1 : 2;
int value4 = (not memberPointer) ? 1 : 2;
+
+ // Passing a string literal creates a temporary std::string, which causes
+ // Clang to wrap the condition in ExprWithCleanups. This should still be
+ // allowed when AllowPointerConditions is true.
+ if (functionReturningPointerWithStringArg("input")) {}
}
More information about the cfe-commits
mailing list