[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:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user