[clang-tools-extra] [clang-tidy] Fix a false positive when converting a bool to a signed integer type (PR #191696)
Mao Chuanjun via cfe-commits
cfe-commits at lists.llvm.org
Sun Apr 12 02:38:16 PDT 2026
https://github.com/maochuanjun created https://github.com/llvm/llvm-project/pull/191696
Fix #191337
>From 2648ba4ff60476ed96fd9c6dcd0f88c7793287ad Mon Sep 17 00:00:00 2001
From: maochuanjun <10255501521 at stu.ecnu.edu.cn>
Date: Sun, 12 Apr 2026 17:20:50 +0800
Subject: [PATCH] [clang-tidy] Fix a false positive when converting a bool to a
signed integer type
---
.../clang-tidy/bugprone/NarrowingConversionsCheck.cpp | 3 +++
clang-tools-extra/docs/ReleaseNotes.rst | 4 ++++
.../checkers/bugprone/narrowing-conversions.cpp | 8 ++++++++
3 files changed, 15 insertions(+)
diff --git a/clang-tools-extra/clang-tidy/bugprone/NarrowingConversionsCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/NarrowingConversionsCheck.cpp
index f0a0f6c9b3106..58119078f89ab 100644
--- a/clang-tools-extra/clang-tidy/bugprone/NarrowingConversionsCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/NarrowingConversionsCheck.cpp
@@ -402,6 +402,9 @@ void NarrowingConversionsCheck::handleIntegralCast(const ASTContext &Context,
return;
const BuiltinType *FromType = getBuiltinType(Rhs);
+ if (FromType->getKind() == BuiltinType::Bool)
+ return;
+
// With this option, we don't warn on conversions that have equivalent width
// in bits. eg. uint32 <-> int32.
if (!WarnOnEquivalentBitWidth) {
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index d51cbc07c0b6d..6979c2cbcfff2 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -262,6 +262,10 @@ Changes in existing checks
<clang-tidy/checks/bugprone/macro-parentheses>` check by printing the macro
definition in the warning message if the macro is defined on command line.
+- Improved :doc:`bugprone-narrowing-conversions
+ <clang-tidy/checks/bugprone/narrowing-conversions>` check by fixing a false
+ positive when converting a ``bool`` to a signed integer type.
+
- Improved :doc:`bugprone-pointer-arithmetic-on-polymorphic-object
<clang-tidy/checks/bugprone/pointer-arithmetic-on-polymorphic-object>` check
by fixing a false positive when ``operator[]`` is used in a dependent context.
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/narrowing-conversions.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone/narrowing-conversions.cpp
index 39875264bd1e6..fb7a268625840 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/narrowing-conversions.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/narrowing-conversions.cpp
@@ -355,4 +355,12 @@ void typedef_context() {
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: narrowing conversion from 'myint64_t' (aka 'long long') to signed type 'int' is implementation-defined [bugprone-narrowing-conversions]
}
+void testBoolToSignedType() {
+ bool b = true;
+ auto c = char{b};
+ auto sc = (signed char){b};
+ auto s = short{b};
+ auto i = int{b};
+}
+
} // namespace floats
More information about the cfe-commits
mailing list