This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
How to clear unused variable warnings created by static assert?
- From: Jeffrey Walton <noloader at gmail dot com>
- To: "gcc-help at gcc dot gnu dot org" <gcc-help at gcc dot gnu dot org>
- Date: Thu, 23 Jul 2015 08:50:58 -0400
- Subject: How to clear unused variable warnings created by static assert?
- Authentication-results: sourceware.org; auth=none
- Reply-to: noloader at gmail dot com
Our project has a static assert. Its creating a noisy output at -Wall
and above. We attempted to manage it with a GCC diagnostic block, but
its not quite meeting expectations. The static assert creates a bunch
of unused variable warnings.
We have a UNUSED macro that casts to a void (its the only portable way
I know to clear an unused warning), but we don't have a variable name
to use with it.
How can we clear a warning like `unused variable 'assert_26'
[-Wunused-variable]|`?
**********
Here's the static assert:
template <bool b>
struct CompileAssert
{
static char dummy[2*b-1];
};
#define COMPILE_ASSERT(assertion) COMPILE_ASSERT_INSTANCE(assertion, __LINE__)
#define COMPILE_ASSERT_INSTANCE(assertion, instance) static
CompileAssert<(assertion)> ASSERT_JOIN(assert_, instance)
#define ASSERT_JOIN(X, Y) DO_ASSERT_JOIN(X, Y)
#define DO_ASSERT_JOIN(X, Y) X##Y
**********
Here's how we try to manage it in one of out header files:
#ifndef FOO_BAR
#define FOO_BAR
#define GCC_OPTIMIZE_AWARE ((__GNUC__ > 4 || (__GNUC__ == 4 &&
__GNUC_MINOR__ >= 7)) || defined(__clang__))
#if GCC_DIAGNOSTIC_AWARE
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wunused-value"
# pragma GCC diagnostic ignored "-Wunused-variable"
#endif
....
COMPILE_ASSERT(foo == bar);
#if GCC_DIAGNOSTIC_AWARE
# pragma GCC diagnostic pop
#endif
#endif // FOO_BAR
**********
Users include the header file, so we have no control over which
options they place on the command line.
Here's an example of the warning it generates with -Wall and GCC 4.8
(even when guarded like above):
unused variable 'assert_26' [-Wunused-variable]|