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

--- Comment #7 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
> Also, I'll add that the warning cannot be silenced with a #pragma, so I
> can't, for example, disable it for libresiprocate headers and leave it
> enabled for my code.

I think either Paolo or me fixed this in GCC 6.1. All warnings should be
affected by pragmas; otherwise it is a bug, please report it. Those bugs are
typically very easy to fix (you could even fix them yourself without any legal
paperwork involved).

In this case, I bet the warning call was:

    warning ((TREE_CODE (decl) == FUNCTION_DECL)
                ? OPT_Wunused_function
                : (TREE_READONLY (decl)
                   ? OPT_Wunused_const_variable_
                   : OPT_Wunused_variable),
                "%q+D defined but not used", decl);

and it should be:

    warning_at (DECL_SOURCE_LOCATION (decl),
                (TREE_CODE (decl) == FUNCTION_DECL)
                ? OPT_Wunused_function
                : (TREE_READONLY (decl)
                   ? OPT_Wunused_const_variable_
                   : OPT_Wunused_variable),
                "%qD defined but not used", decl);


In your testcase, this works just fine:

#pragma GCC diagnostic ignored "-Wunused-variable"
class Foo
{
public:
    static bool init();
};

static bool FooInit = Foo::init();

int main()
{
    return 0;
}

Reply via email to