[clang-tools-extra] [clang-tidy] Diagnose NULL macro expansions in implicit-bool-conversion (PR #188694)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 26 00:08:13 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-tools-extra
@llvm/pr-subscribers-clang-tidy
Author: Zeyi Xu (zeyi2)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/188694.diff
4 Files Affected:
- (modified) clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp (+4-2)
- (modified) clang-tools-extra/docs/ReleaseNotes.rst (+8-5)
- (modified) clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.c (+2-2)
- (modified) clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp (+2-2)
``````````diff
diff --git a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
index a138d1900b799..ee30b792051e0 100644
--- a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp
@@ -382,7 +382,8 @@ void ImplicitBoolConversionCheck::handleCastToBool(const ImplicitCastExpr *Cast,
return;
}
- auto Diag = diag(Cast->getBeginLoc(), "implicit conversion %0 -> 'bool'")
+ auto Diag = diag(Context.getSourceManager().getFileLoc(Cast->getBeginLoc()),
+ "implicit conversion %0 -> 'bool'")
<< Cast->getSubExpr()->getType();
const StringRef EquivalentLiteral =
@@ -400,7 +401,8 @@ void ImplicitBoolConversionCheck::handleCastFromBool(
ASTContext &Context) {
const QualType DestType =
NextImplicitCast ? NextImplicitCast->getType() : Cast->getType();
- auto Diag = diag(Cast->getBeginLoc(), "implicit conversion 'bool' -> %0")
+ auto Diag = diag(Context.getSourceManager().getFileLoc(Cast->getBeginLoc()),
+ "implicit conversion 'bool' -> %0")
<< DestType;
if (const auto *BoolLiteral =
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index f8550e72dcc85..5ea37e179bc13 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -396,11 +396,14 @@ Changes in existing checks
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)
+ <clang-tidy/checks/readability/implicit-bool-conversion>` check:
+
+ - Fixed 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).
+
+ - Warn and provide fix-its when ``NULL`` is defined in system headers.
- Improved :doc:`readability-non-const-parameter
<clang-tidy/checks/readability/non-const-parameter>` check by avoiding false
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.c b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.c
index f9326a185b3a6..67b9f906f888b 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.c
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.c
@@ -1,5 +1,5 @@
-// RUN: %check_clang_tidy -std=c23-or-later %s readability-implicit-bool-conversion %t --system-headers
-// RUN: %check_clang_tidy -std=c23-or-later -check-suffix=UPPER-CASE %s readability-implicit-bool-conversion %t -- --system-headers \
+// RUN: %check_clang_tidy -std=c23-or-later %s readability-implicit-bool-conversion %t
+// RUN: %check_clang_tidy -std=c23-or-later -check-suffix=UPPER-CASE %s readability-implicit-bool-conversion %t -- \
// RUN: -config='{CheckOptions: { \
// RUN: readability-implicit-bool-conversion.UseUpperCaseLiteralSuffix: true \
// RUN: }}'
diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp
index 50e2994474452..c8312ab6183b9 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp
@@ -1,5 +1,5 @@
-// RUN: %check_clang_tidy %s readability-implicit-bool-conversion %t -- --system-headers
-// RUN: %check_clang_tidy -check-suffix=UPPER-CASE %s readability-implicit-bool-conversion %t -- --system-headers \
+// RUN: %check_clang_tidy %s readability-implicit-bool-conversion %t --
+// RUN: %check_clang_tidy -check-suffix=UPPER-CASE %s readability-implicit-bool-conversion %t -- \
// RUN: -config='{CheckOptions: { \
// RUN: readability-implicit-bool-conversion.UseUpperCaseLiteralSuffix: true \
// RUN: }}'
``````````
</details>
https://github.com/llvm/llvm-project/pull/188694
More information about the cfe-commits
mailing list