From eac5105574e6144eb702e75b21d00203706c6ada Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Sat, 1 Mar 2025 19:38:43 +0300 Subject: [PATCH 1/2] 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("used")) - removeFromFoundDecls(UDL->getCalleeDecl()); + if (const auto *UDL = Result.Nodes.getNodeAs("used")) { + const Decl *CalleeDecl = UDL->getCalleeDecl(); + if (const auto *FD = dyn_cast(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 ` check by fixing false negatives on ternary operators calling ``std::move``. +- Improved :doc:`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 + int operator""_r() { + return {}; + } +} + +using my_literals::operator"" _r; + +int foo() { + auto x2 = 123_r; +} + +} From 24dda4d303e0dbfd1146de046b0dd84052a87c09 Mon Sep 17 00:00:00 2001 From: Baranov Victor <70346889+vbvictor@users.noreply.github.com> Date: Sun, 2 Mar 2025 20:38:07 +0300 Subject: [PATCH 2/2] fix pr comments Co-authored-by: Congcong Cai --- clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp index 0b501b9c9d6a3..d5c5fa3364d63 100644 --- a/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp +++ b/clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp @@ -186,7 +186,7 @@ void UnusedUsingDeclsCheck::check(const MatchFinder::MatchResult &Result) { // Check user-defined literals if (const auto *UDL = Result.Nodes.getNodeAs("used")) { const Decl *CalleeDecl = UDL->getCalleeDecl(); - if (const auto *FD = dyn_cast(UDL->getCalleeDecl())) { + if (const auto *FD = dyn_cast(CalleeDecl)) { if (const FunctionTemplateDecl *FPT = FD->getPrimaryTemplate()) { removeFromFoundDecls(FPT); return;