[PATCH] D143524: Make the -Wunused-template default.

Louis Dionne via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 27 10:39:03 PST 2023


ldionne added inline comments.


================
Comment at: clang/test/SemaCXX/warn-func-not-needed.cpp:13
 namespace test1_template {
-template <typename T> static void f() {}
+template <typename T> static void f() {} // expected-warning {{unused function template}}
 template <> void f<int>() {} // expected-warning {{function 'f<int>' is not needed and will not be emitted}}
----------------
aaron.ballman wrote:
> v.g.vassilev wrote:
> > aaron.ballman wrote:
> > > v.g.vassilev wrote:
> > > > aaron.ballman wrote:
> > > > > Why is this unused? `f<long>()` in `foo()` should cause this to be used, right?
> > > > > 
> > > > > How should a user silence this diagnostic without disabling it entirely?
> > > > Nobody uses `foo`.
> > > Ah, good point on `foo` not being used, but the question still stands -- how does the user silence this diagnostic? It's not at all uncommon to have a primary template with specializations where the TU only uses either the primary or a specialization, but not both (and certainly not all specializations).
> > @philnik used `[[maybe_unused]]` which seemed reasonable to me for silencing the diagnostic. Maybe take a look at the changes done here: https://reviews.llvm.org/D144667
> That's reasonable if the interface is one the user controls, such as one within a .cpp file. But the situation I'm worried about is where the primary template and specializations live in a header file that's shared between multiple TUs. I don't think it's reasonable to expect users to put `[[maybe_unused]]` on the primary template and all specializations in that situation.
Don't y'all find it weird to have to use `[[maybe_unused]]` on something that is only a declaration like those CTAD guides? And I agree with @aaron.ballman here: we provide headers that are used in various TUs, and we obviously never expect that the entirety of our headers is going to be used by every single TU.

In other words, we totally expect that those deduction guides will be unused in some cases, since it's entirely fine for a user not to use them but for us to still provide them. If I understood this correctly, this seems like a flaw in the warning that we should fix in Clang.


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143524/new/

https://reviews.llvm.org/D143524



More information about the cfe-commits mailing list