• G
    include: jhash/signal: Fix fall-through warnings for Clang · 4169e889
    Gustavo A. R. Silva 提交于
    In preparation to enable -Wimplicit-fallthrough for Clang, explicitly
    add break statements instead of letting the code fall through to the
    next case.
    
    This patch adds four break statements that, together, fix almost 40,000
    warnings when building Linux 5.10-rc1 with Clang 12.0.0 and this[1] change
    reverted. Notice that in order to enable -Wimplicit-fallthrough for Clang,
    such change[1] is meant to be reverted at some point. So, this patch helps
    to move in that direction.
    
    Something important to mention is that there is currently a discrepancy
    between GCC and Clang when dealing with switch fall-through to empty case
    statements or to cases that only contain a break/continue/return
    statement[2][3][4].
    
    Now that the -Wimplicit-fallthrough option has been globally enabled[5],
    any compiler should really warn on missing either a fallthrough annotation
    or any of the other case-terminating statements (break/continue/return/
    goto) when falling through to the next case statement. Making exceptions
    to this introduces variation in case handling which may continue to lead
    to bugs, misunderstandings, and a general lack of robustness. The point
    of enabling options like -Wimplicit-fallthrough is to prevent human error
    and aid developers in spotting bugs before their code is even built/
    submitted/committed, therefore eliminating classes of bugs. So, in order
    to really accomplish this, we should, and can, move in the direction of
    addressing any error-prone scenarios and get rid of the unintentional
    fallthrough bug-class in the kernel, entirely, even if there is some minor
    redundancy. Better to have explicit case-ending statements than continue to
    have exceptions where one must guess as to the right result. The compiler
    will eliminate any actual redundancy.
    
    [1] commit e2079e93 ("kbuild: Do not enable -Wimplicit-fallthrough for clang for now")
    [2] https://github.com/ClangBuiltLinux/linux/issues/636
    [3] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91432
    [4] https://godbolt.org/z/xgkvIh
    [5] commit a035d552 ("Makefile: Globally enable fall-through warning")
    Co-developed-by: NKees Cook <keescook@chromium.org>
    Signed-off-by: NKees Cook <keescook@chromium.org>
    Signed-off-by: NGustavo A. R. Silva <gustavoars@kernel.org>
    4169e889
jhash.h 4.6 KB