https://github.com/vbvictor created https://github.com/llvm/llvm-project/pull/129392
Fixes false-positives when operator"" has template paremetes, e.g. ```cpp template <char... Ts> int operator""_r() { return {}; } ``` >From eac5105574e6144eb702e75b21d00203706c6ada Mon Sep 17 00:00:00 2001 From: Victor Baranov <bar.victor.2...@gmail.com> Date: Sat, 1 Mar 2025 19:38:43 +0300 Subject: [PATCH] add correct handling of template operator"" --- .../clang-tidy/misc/UnusedUsingDeclsCheck.cpp | 12 ++++++++++-- clang-tools-extra/docs/ReleaseNotes.rst | 4 ++++ .../checkers/misc/unused-using-decls.cpp | 16 ++++++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp index 5d74907aa9fab..0b501b9c9d6a3 100644 --- a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp @@ -184,8 +184,16 @@ void UnusedUsingDeclsCheck::check(const MatchFinder::MatchResult &Result) { return; } // Check user-defined literals - if (const auto *UDL = Result.Nodes.getNodeAs<UserDefinedLiteral>("used")) - removeFromFoundDecls(UDL->getCalleeDecl()); + if (const auto *UDL = Result.Nodes.getNodeAs<UserDefinedLiteral>("used")) { + const Decl *CalleeDecl = UDL->getCalleeDecl(); + if (const auto *FD = dyn_cast<FunctionDecl>(UDL->getCalleeDecl())) { + if (const FunctionTemplateDecl *FPT = FD->getPrimaryTemplate()) { + removeFromFoundDecls(FPT); + return; + } + } + removeFromFoundDecls(CalleeDecl); + } } void UnusedUsingDeclsCheck::removeFromFoundDecls(const Decl *D) { diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 07a79d6bbe807..ccdb741ef5879 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -137,6 +137,10 @@ Changes in existing checks <clang-tidy/checks/performance/move-const-arg>` check by fixing false negatives on ternary operators calling ``std::move``. +- Improved :doc:`misc-unused-using-decls + <clang-tidy/checks/misc/unused-using-decls>` check by fixing false positives + on ``operator""`` with template parameters. + Removed checks ^^^^^^^^^^^^^^ diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc/unused-using-decls.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc/unused-using-decls.cpp index 12fc18f340f21..62aa17b0b1c22 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/misc/unused-using-decls.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/misc/unused-using-decls.cpp @@ -222,3 +222,19 @@ using gh69714::StructGH69714_1; using gh69714::StructGH69714_2; struct StructGH69714_1 a; struct StructGH69714_2 *b; + +namespace gh53444 { +namespace my_literals { + template <char... Ts> + int operator""_r() { + return {}; + } +} + +using my_literals::operator"" _r; + +int foo() { + auto x2 = 123_r; +} + +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits