GCC/clang warning incompatibility with unused private member variables

Jason Merrill jason@redhat.com
Fri Jun 11 20:03:34 GMT 2021

On 6/11/21 3:37 PM, Markus Faehling wrote:
> Hello,
> I'm currently facing a problem where I cannot get both gcc and clang 
> warning-free simultaneously in my project. My code looks somewhat like 
> this:
> class Test {
>      int a_;
>      void b() {};
> };
> This code gives me the(usually very useful) "-Wunused-private-field" 
> warning on clang. But because I have the unused member on purpose, I 
> would like to add the [[maybe_unused]] attribute to it:
> class Test {
>      [[maybe_unused]] int a_;
>      void b() {};
> };
> While this version is warning-free in clang, gcc has a "-Wattributes" 
> warning because it ignores the [[maybe_unused]] warning. But I do not 
> want to disable either of these warnings because they are still very 
> useful in other situations.
> Would it be possible to ignore the "-Wattributes" warning for 
> [[maybe_unused]] in places where other compilers might use the attribute?
> Demonstration on godbolt.org: https://godbolt.org/z/8oT4Kr5eM

You can use #pragma to disable a warning for a particular section of code:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wattributes"
class Test {
      [[maybe_unused]] int a_;
      void b() {};
#pragma GCC diagnostic pop

But I also agree that GCC shouldn't warn here.


More information about the Gcc mailing list