• Arnd Bergmann's avatar
    bitfield: avoid gcc-8 -Wint-in-bool-context warning · e36488c8
    Arnd Bergmann authored
    Passing an enum into FIELD_GET() produces a long but harmless warning on
    newer compilers:
                       from include/linux/linkage.h:7,
                       from include/linux/kernel.h:7,
                       from include/linux/skbuff.h:17,
                       from include/linux/if_ether.h:23,
                       from include/linux/etherdevice.h:25,
                       from drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c:63:
      drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c: In function 'iwl_mvm_rx_mpdu_mq':
      include/linux/bitfield.h:56:20: error: enum constant in boolean context [-Werror=int-in-bool-context]
         BUILD_BUG_ON_MSG(!(_mask), _pfx "mask is zero"); \
      include/linux/bitfield.h:103:3: note: in expansion of macro '__BF_FIELD_CHECK'
         __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \
      drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c:1025:21: note: in expansion of macro 'FIELD_GET'
    The problem here is that the caller has no idea how the macro gets
    expanding, leading to a false-positive.  It can be trivially avoided by
    doing a comparison against zero.
    This only recently started appearing as the iwlwifi driver was patched
    to use FIELD_GET.
    Link: http://lkml.kernel.org/r/20180813220950.194841-1-arnd@arndb.de
    Fixes: 514c3069 ("iwlwifi: add support for IEEE802.11ax")
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
    Cc: Johannes Berg <johannes@sipsolutions.net>
    Cc: Jakub Kicinski <jakub.kicinski@netronome.com>
    Cc: Andy Shevchenko <andy.shevchenko@gmail.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: David Laight <David.Laight@ACULAB.COM>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
bitfield.h 4.69 KB