lkml.org 
[lkml]   [2020]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.14 098/108] include/linux/bitops.h: avoid clang shift-count-overflow warnings
    Date
    From: Arnd Bergmann <arnd@arndb.de>

    [ Upstream commit bd93f003b7462ae39a43c531abca37fe7073b866 ]

    Clang normally does not warn about certain issues in inline functions when
    it only happens in an eliminated code path. However if something else
    goes wrong, it does tend to complain about the definition of hweight_long()
    on 32-bit targets:

    include/linux/bitops.h:75:41: error: shift count >= width of type [-Werror,-Wshift-count-overflow]
    return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
    ^~~~~~~~~~~~
    include/asm-generic/bitops/const_hweight.h:29:49: note: expanded from macro 'hweight64'
    define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w))
    ^~~~~~~~~~~~~~~~~~~~
    include/asm-generic/bitops/const_hweight.h:21:76: note: expanded from macro '__const_hweight64'
    define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32))
    ^ ~~
    include/asm-generic/bitops/const_hweight.h:20:49: note: expanded from macro '__const_hweight32'
    define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16))
    ^
    include/asm-generic/bitops/const_hweight.h:19:72: note: expanded from macro '__const_hweight16'
    define __const_hweight16(w) (__const_hweight8(w) + __const_hweight8((w) >> 8 ))
    ^
    include/asm-generic/bitops/const_hweight.h:12:9: note: expanded from macro '__const_hweight8'
    (!!((w) & (1ULL << 2))) + \

    Adding an explicit cast to __u64 avoids that warning and makes it easier
    to read other output.

    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
    Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Link: http://lkml.kernel.org/r/20200505135513.65265-1-arnd@arndb.de
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    include/linux/bitops.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/include/linux/bitops.h b/include/linux/bitops.h
    index c51574fab0b0..00dcb1bad76b 100644
    --- a/include/linux/bitops.h
    +++ b/include/linux/bitops.h
    @@ -50,7 +50,7 @@ static inline int get_bitmask_order(unsigned int count)

    static __always_inline unsigned long hweight_long(unsigned long w)
    {
    - return sizeof(w) == 4 ? hweight32(w) : hweight64(w);
    + return sizeof(w) == 4 ? hweight32(w) : hweight64((__u64)w);
    }

    /**
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-18 03:48    [W:4.037 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site