[clang] [clang][Sema] Refine unused-member-function diagnostic message for constructors (PR #84515)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 3 09:06:44 PDT 2025


================
@@ -402,7 +402,7 @@ def warn_unused_function : Warning<"unused function %0">,
   InGroup<UnusedFunction>, DefaultIgnore;
 def warn_unused_template : Warning<"unused %select{function|variable}0 template %1">,
   InGroup<UnusedTemplate>, DefaultIgnore;
-def warn_unused_member_function : Warning<"unused member function %0">,
+def warn_unused_member_function : Warning<"unused %select{constructor|member function %1}0">,
----------------
AaronBallman wrote:

> However, note that only default constructors are considered “special members” (see CXXSpecialMemberKind).

It supports more than just a default constructor:
https://github.com/llvm/llvm-project/blob/d0fb83531b07f608da064ed98e6213f32a5544e9/clang/include/clang/Sema/Sema.h#L422

So I was thinking something more like:
```
def warn_unused_member_function : Warning<
  "unused %select{member function %1|%sub{select_special_member_kind}1}0">,
  InGroup<UnusedMemberFunction>, DefaultIgnore;
```
and
```
DefaultedFunctionKind DFK = getDefaultedFunctionKind(DiagD);
if (DFK.isSpecialMember())
  Diag(DiagD->getLocation(), diag::warn_unused_member_function) << /*special member*/1 << DFK.asSpecialMember()) << DiagRange;
else if (isa<CXXMethodDecl>(DiagD))
  Diag(DiagD->getLocation(), diag::warn_unused_member_function) << /*member*/0 << DiagD << DiagRange;
else
  Diag(DiagD->getLocation(), diag::warn_unused_function) << DiagD << DiagRange;
```

https://github.com/llvm/llvm-project/pull/84515


More information about the cfe-commits mailing list