llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tidy Author: Baranov Victor (vbvictor) <details> <summary>Changes</summary> Fixes false-positives when operator"" has template paremetes, e.g. ```cpp template <char... Ts> int operator""_r() { return {}; } ``` --- Full diff: https://github.com/llvm/llvm-project/pull/129392.diff 3 Files Affected: - (modified) clang-tools-extra/clang-tidy/misc/UnusedUsingDeclsCheck.cpp (+10-2) - (modified) clang-tools-extra/docs/ReleaseNotes.rst (+4) - (modified) clang-tools-extra/test/clang-tidy/checkers/misc/unused-using-decls.cpp (+16) ``````````diff 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; +} + +} `````````` </details> https://github.com/llvm/llvm-project/pull/129392 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits