On 12/18/24 10:53 AM, Jakub Jelinek wrote:
On Tue, Dec 17, 2024 at 05:54:36PM -0500, Jason Merrill wrote:
On 9/5/24 3:27 AM, Jakub Jelinek wrote:
When adding test coverage for maybe_unused attribute, I've run into
several things:
1) similarly to deprecated attribute, the attribute shouldn't pedantically
appertain to types other than class/enumeration definitions
2) similarly to deprecated attribute, the attribute shouldn't pedantically
appertain to unnamed bit-fields
3) the standard says that it can appertain to identifier labels, but
we handled it silently also on case and default labels
As with deprecated, wouldn't it be an improvement to warn for the GNU
attribute in these cases as well?
Similar to the deprecated case, I see the 1) case e.g. in
g++.dg/cpp0x/gen-attrs-22.C
c-c++-common/Wunused-var-11.c
g++.dg/ext/attrib61.C
c-c++-common/Wunused-var-11.c
g++.dg/warn/Wunused-local-typedefs.C
tests and 3) case in gcc.dg/c23-attr-maybe_unused-1.c
OK.
I don't see any 2) cases in the GCC testsuite, haven't searched for it in other
codebases. But I'm still worried of changing something that has been
accepted for 23 years without a standard telling it is not ok anymore (which
is the case of [[maybe_unused]] in C++.
Hmm, we usually aren't extremely cautious about adding warnings. And it
seems completely useless to attach these attributes something you can't
refer to in any way. But since we're handling types differently, might
as well handle this in the separate function as well.
The patch is OK.
From what I see, even when the C added some pedantic diagnostics for
standard attributes, it added them just to the standard ones and not the GNU
ones, e.g. handle_std_noreturn_attribute adds those on top of
handle_noreturn_attribute.
I think PR27648 has been filed long before the advent of fuzzers, so maybe
it came from some real-world code or somebody at least tried to use it like
that.
Jakub