[clang-tools-extra] Revert "[clang-tidy] Improve integer comparison by matching valid expressions outside implicitCastExpr" (PR #143944)
David Rivera via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 12 10:57:20 PDT 2025
https://github.com/RiverDave created https://github.com/llvm/llvm-project/pull/143944
Reverts llvm/llvm-project#134188
related: https://github.com/llvm/llvm-project/issues/143927
>From f8abd70d85becb4c5d2f56bbe193bb3d7b5a8c1c Mon Sep 17 00:00:00 2001
From: David Rivera <davidriverg at gmail.com>
Date: Thu, 12 Jun 2025 13:56:16 -0400
Subject: [PATCH] =?UTF-8?q?Revert=20"[clang-tidy]=20Improve=20integer=20co?=
=?UTF-8?q?mparison=20by=20matching=20valid=20expressions=E2=80=A6"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This reverts commit e65d32316646e6203a3f4d4c9921edcddbb1c57d.
---
.../UseIntegerSignComparisonCheck.cpp | 21 ++---
clang-tools-extra/docs/ReleaseNotes.rst | 4 -
.../modernize/use-integer-sign-comparison.cpp | 78 -------------------
3 files changed, 7 insertions(+), 96 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/modernize/UseIntegerSignComparisonCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseIntegerSignComparisonCheck.cpp
index c02c5dfa8756d..eeba5cce80da5 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseIntegerSignComparisonCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseIntegerSignComparisonCheck.cpp
@@ -39,28 +39,21 @@ intCastExpression(bool IsSigned,
// std::cmp_{} functions trigger a compile-time error if either LHS or RHS
// is a non-integer type, char, enum or bool
// (unsigned char/ signed char are Ok and can be used).
- const auto HasIntegerType = hasType(hasCanonicalType(qualType(
+ auto IntTypeExpr = expr(hasType(hasCanonicalType(qualType(
isInteger(), IsSigned ? isSignedInteger() : isUnsignedInteger(),
- unless(isActualChar()), unless(booleanType()), unless(enumType()))));
-
- const auto IntTypeExpr = expr(HasIntegerType);
+ unless(isActualChar()), unless(booleanType()), unless(enumType())))));
const auto ImplicitCastExpr =
CastBindName.empty() ? implicitCastExpr(hasSourceExpression(IntTypeExpr))
: implicitCastExpr(hasSourceExpression(IntTypeExpr))
.bind(CastBindName);
- const auto ExplicitCastExpr =
- anyOf(explicitCastExpr(has(ImplicitCastExpr)),
- ignoringImpCasts(explicitCastExpr(has(ImplicitCastExpr))));
-
- // Match function calls or variable references not directly wrapped by an
- // implicit cast
- const auto CallIntExpr = CastBindName.empty()
- ? callExpr(HasIntegerType)
- : callExpr(HasIntegerType).bind(CastBindName);
+ const auto CStyleCastExpr = cStyleCastExpr(has(ImplicitCastExpr));
+ const auto StaticCastExpr = cxxStaticCastExpr(has(ImplicitCastExpr));
+ const auto FunctionalCastExpr = cxxFunctionalCastExpr(has(ImplicitCastExpr));
- return expr(anyOf(ImplicitCastExpr, ExplicitCastExpr, CallIntExpr));
+ return expr(anyOf(ImplicitCastExpr, CStyleCastExpr, StaticCastExpr,
+ FunctionalCastExpr));
}
static StringRef parseOpCode(BinaryOperator::Opcode Code) {
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 882ee0015df17..19ccd1790e757 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -237,10 +237,6 @@ Changes in existing checks
<clang-tidy/checks/modernize/use-designated-initializers>` check by avoiding
diagnosing designated initializers for ``std::array`` initializations.
-- Improved :doc:`modernize-use-integer-sign-comparison
- <clang-tidy/checks/modernize/use-integer-sign-comparison>` check by matching
- valid integer expressions not directly wrapped around an implicit cast.
-
- Improved :doc:`modernize-use-ranges
<clang-tidy/checks/modernize/use-ranges>` check by updating suppress
warnings logic for ``nullptr`` in ``std::find``.
diff --git a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-integer-sign-comparison.cpp b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-integer-sign-comparison.cpp
index d93a05ac38050..e0a84ef5aed26 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/modernize/use-integer-sign-comparison.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/modernize/use-integer-sign-comparison.cpp
@@ -121,81 +121,3 @@ int AllComparisons() {
return 0;
}
-
-namespace PR127471 {
- int getSignedValue();
- unsigned int getUnsignedValue();
-
- void callExprTest() {
-
- if (getSignedValue() < getUnsignedValue())
- return;
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
-// CHECK-FIXES: if (std::cmp_less(getSignedValue() , getUnsignedValue()))
-
- int sVar = 0;
- if (getUnsignedValue() > sVar)
- return;
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
-// CHECK-FIXES: if (std::cmp_greater(getUnsignedValue() , sVar))
-
- unsigned int uVar = 0;
- if (getSignedValue() > uVar)
- return;
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
-// CHECK-FIXES: if (std::cmp_greater(getSignedValue() , uVar))
-
- }
-
- // Add a class with member functions for testing member function calls
- class TestClass {
- public:
- int getSignedValue() { return -5; }
- unsigned int getUnsignedValue() { return 5; }
- };
-
- void memberFunctionTests() {
- TestClass obj;
-
- if (obj.getSignedValue() < obj.getUnsignedValue())
- return;
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
-// CHECK-FIXES: if (std::cmp_less(obj.getSignedValue() , obj.getUnsignedValue()))
- }
-
- void castFunctionTests() {
- // C-style casts with function calls
- if ((int)getUnsignedValue() < (unsigned int)getSignedValue())
- return;
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
-// CHECK-FIXES: if (std::cmp_less(getUnsignedValue(),getSignedValue()))
-
-
- // Static casts with function calls
- if (static_cast<int>(getUnsignedValue()) < static_cast<unsigned int>(getSignedValue()))
- return;
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
-// CHECK-FIXES: if (std::cmp_less(getUnsignedValue(),getSignedValue()))
- }
-
- // Define tests
- #define SIGNED_FUNC getSignedValue()
- #define UNSIGNED_FUNC getUnsignedValue()
-
- void defineTests() {
- if (SIGNED_FUNC < UNSIGNED_FUNC)
- return;
-// CHECK-MESSAGES: :[[@LINE-2]]:13: warning: comparison between 'signed' and 'unsigned' integers [modernize-use-integer-sign-comparison]
-// CHECK-FIXES: if (std::cmp_less(SIGNED_FUNC , UNSIGNED_FUNC))
- }
-
- // Template tests (should not warn)
- template <typename T1>
- void templateFunctionTest(T1 value) {
- if (value() < getUnsignedValue())
- return;
-
- if (value() < (getSignedValue() || getUnsignedValue()))
- return;
- }
-} // namespace PR127471
More information about the cfe-commits
mailing list