[Bug c++/101940] New: Implement -fignored-attributes

mpolacek at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Aug 16 21:05:20 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101940

            Bug ID: 101940
           Summary: Implement -fignored-attributes
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mpolacek at gcc dot gnu.org
  Target Milestone: ---

It is desirable for -Wattributes to warn about e.g.

[[deprecate]] void g(); // typo, should warn

However, -Wattributes also warns about vendor-specific attributes (that's
because lookup_scoped_attribute_spec -> find_attribute_namespace finds
nothing), which, with -Werror, causes grief.  We don't want the -Wattributes
warning for

[[company::attr]] void f();

GCC warns because it doesn't know the "company" namespace; it only knows the
"gnu" and "omp" namespaces.  We could entirely disable warning about attributes
in unknown scopes but then the compiler would also miss typos like

  [[company::attrx]] void f();

or 

  [[gmu::warn_used_result]] int write();

so that is not a viable solution.  A workaround is to use a #pragma:

  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wattributes"
  [[company::attr]] void f() {}
  #pragma GCC diagnostic pop

but that's a mouthful and awkward to use and could also hide typos.  In fact,
any macro-based solution doesn't seem like a way forward.

So this RFE asks for -fignored-attributes=, which, IMHO, should take these
arguments:

company::attr
company::
clang

the last is a special option to ignore clang-only attributes.  Maybe we could
also accept ::attr.

This option should go well with using @file: we could have a file containing
-fignored-attributes=vendor::attr1,vendor::attr2
and then invoke gcc with '@attrs' or similar.

It might also make sense to implement a #pragma to go along:

#pragma GCC ignored-attributes=vendor::attr1,vendor::attr2.

This should help with various static analysis tools and similar.


More information about the Gcc-bugs mailing list