https://github.com/flovent created https://github.com/llvm/llvm-project/pull/154782
Closes #154762 >From a2a7894dca6ec009974e5a25bfd11ce40a228d98 Mon Sep 17 00:00:00 2001 From: flovent <flb...@protonmail.com> Date: Thu, 21 Aug 2025 23:06:31 +0800 Subject: [PATCH] [clang-tidy] Ignore default ctor with user provided argument in `readability-container-size-empty` --- .../readability/ContainerSizeEmptyCheck.cpp | 2 +- clang-tools-extra/docs/ReleaseNotes.rst | 3 ++- .../readability/container-size-empty.cpp | 24 +++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp b/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp index c4dc319f23c38..c5df94dae50b1 100644 --- a/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp @@ -190,7 +190,7 @@ void ContainerSizeEmptyCheck::registerMatchers(MatchFinder *Finder) { const auto WrongComparend = anyOf(stringLiteral(hasSize(0)), userDefinedLiteral(hasLiteral(stringLiteral(hasSize(0)))), - cxxConstructExpr(isDefaultConstruction()), + cxxConstructExpr(isDefaultConstruction(), argumentCountIs(0)), cxxUnresolvedConstructExpr(argumentCountIs(0))); // Match the object being compared. const auto STLArg = diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 388979d9577ba..adf1c039916ff 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -211,7 +211,8 @@ Changes in existing checks - Improved :doc:`readability-container-size-empty <clang-tidy/checks/readability/container-size-empty>` check by correctly - generating fix-it hints when size method is called from implicit ``this``. + generating fix-it hints when size method is called from implicit ``this`` + and ignoring default constructors with user provided arguments. - Improved :doc:`readability-identifier-naming <clang-tidy/checks/readability/identifier-naming>` check by ignoring diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/container-size-empty.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/container-size-empty.cpp index b1e68672a3a9a..48a3ca1726f39 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/container-size-empty.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/container-size-empty.cpp @@ -908,3 +908,27 @@ class foo : public std::string{ }; } + +namespace GH154762 { +class TypeRange { + std::vector<int> b; + +public: + TypeRange(std::vector<int> b = {}); + TypeRange(int); + bool operator==(const TypeRange& other) const; + + size_t size() const { + return b.size(); + } + + bool empty() const { + return size() == 0; + } +}; + +void foo(std::vector<int> v) { + if (TypeRange(1) == TypeRange(v)) { // no warning + } +} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits