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 <davidriv...@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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits