Author: Zeyi Xu Date: 2026-03-30T12:14:39+08:00 New Revision: c963ce446c696482804d96fbed0679380413b55e
URL: https://github.com/llvm/llvm-project/commit/c963ce446c696482804d96fbed0679380413b55e DIFF: https://github.com/llvm/llvm-project/commit/c963ce446c696482804d96fbed0679380413b55e.diff LOG: [clang-tidy] Diagnose NULL macro expansions in implicit-bool-conversion (#188694) The check can't find `NULL` from system headers, this is not the default behaviour we want. This commit fixes the problem. https://clang-tidy.godbolt.org/z/Exd4bzqaT Related discussion in: https://github.com/llvm/llvm-project/pull/188399#discussion_r2985381743 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.c clang-tools-extra/test/clang-tidy/checkers/readability/implicit-bool-conversion.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp b/clang-tools-extra/clang-tidy/readability/ImplicitBoolConversionCheck.cpp index 055ca6f8bdf85..f39572ca24527 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 eb735e6e62ee4..79eea57ce5d06 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -411,11 +411,15 @@ 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 a macro defined in a system header (e.g. + ``NULL``) is implicitly converted to ``bool``. - 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: }}' _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
