<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Apr 18, 2014 at 5:40 AM, Nuno Lopes <span dir="ltr"><<a href="mailto:nunoplopes@sapo.pt" target="_blank">nunoplopes@sapo.pt</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
Please find in attach a second version of the patch, which reuses the cache of defined records properly.<br>
With this patch, -Wunused-member-function now flags unused private methods whenever the class is fully defined.<br>
This patch does not attempt to fix false positives that were being triggered before in classes in anonymous namespaces.  I'll fix those afterwards.<br>
<br>
OK to commit?<br></blockquote><div><br></div><div>No, it's not OK to delete the early pruning of UnusedFileScopedDecls. Without that, we'll load in all unused declarations within a module for every compilation that includes the module.</div>
<div><br></div><div>The approach taken by warning and the existing unused private field warning interact badly with modules in general -- they force us to deserialize most private members within every imported module, just in case the class became completely-defined within this compilation, because their approach is "for each maybe-unused thing, check if it's unused, then diagnose". Instead of the current approach, we could go for "for each class completed in this compilation, check for unused private members".<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks,<br>
Nuno<br>
<br>
----- Original Message ----- From: Nuno Lopes<br>
Sent: Sunday, March 23, 2014 11:14 PM<br>
Subject: Improving -Wunused-member-function<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
Hi,<br>
<br>
I would like to improve -Wunused-member-function to detect unused private<br>
methods, similarly to how -Wunused-private-fields works.<br>
I think clang should be able to flag a method if 1) it is unused, 2) all the<br>
methods of the class are defined in the TU, and 3) any of the following<br>
conditions holds:<br>
- The method is private.<br>
- The method is protected and the class is final.<br>
- The method is public and the class is in an anonymous namespace.<br>
<br>
I have a simple implementation in attach that can handle the first case<br>
(private methods) only.<br>
I'm not very happy with it, though. In particular I would like to move the<br>
logic somewhere else, so that we can reuse it from Codegen. And right now<br>
I'm not caching things properly.  Any suggestions to where this code<br>
belongs?  Should it go directly to Decl? (but that would imply adding a few<br>
fields for cache purposes).<br>
<br></div><div class="">
Any comments and suggestions are welcomed!<br>
<br>
Thanks,<br>
Nuno<br>
<br>
P.S.: I run the attached patch over the LLVM codebase and I already fixed a<br>
bunch of cases it detected (but left many still). So big code bases will<br>
certainly benefit from this analysis. Moreover, removing unused decls<br>
triggered more -Wunused-private-fields  warnings. <br>
</div></blockquote>
</blockquote></div><br></div></div>