[clang-tidy] misc-unused-using-decls: add correct handling of operator"" with template parametes (#129392)

Fixes false-positives when operator"" has template paremetes, e.g.
```cpp
template <char... Ts>
int operator""_r() {
    return {};
}
```
Closes https://github.com/llvm/llvm-project/issues/53444.

---------

Co-authored-by: Congcong Cai <congcongcai0907@163.com>
This commit is contained in:
Baranov Victor
2025-03-03 08:14:27 +03:00
committed by GitHub
parent c804e86f55
commit e9c8d42b89
3 changed files with 30 additions and 2 deletions

View File

@@ -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>(CalleeDecl)) {
if (const FunctionTemplateDecl *FPT = FD->getPrimaryTemplate()) {
removeFromFoundDecls(FPT);
return;
}
}
removeFromFoundDecls(CalleeDecl);
}
}
void UnusedUsingDeclsCheck::removeFromFoundDecls(const Decl *D) {

View File

@@ -138,6 +138,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
^^^^^^^^^^^^^^

View File

@@ -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;
}
}