> @@ -75,9 +77,9 @@ do { \ > */ > #define __WARN_FLAGS(flags) \ > do { \ > + __auto_type f = BUGFLAG_WARNING|(flags); \ > instrumentation_begin(); \ > - _BUG_FLAGS(ASM_UD2, BUGFLAG_WARNING|(flags)); \ > - annotate_reachable(); \ > + _BUG_FLAGS(ASM_UD2, f, ASM_REACHABLE); \ > instrumentation_end(); \ > } while (0) This causes following sparse warning on x86: make allnoconfig && touch init/version.c && make CHECK="sparse -Wshadow" C=1 init/version.o # # No change to .config # CALL scripts/checksyscalls.sh CALL scripts/atomic/check-atomics.sh CHK include/generated/compile.h CC init/version.o CHECK init/version.c init/version.c: note: in included file (through include/linux/rculist.h, include/linux/pid.h, include/linux/sched.h, include/linux/utsname.h): ./include/linux/rcupdate.h:1007:9: warning: symbol 'f' shadows an earlier one ./include/linux/rcupdate.h:1001:47: originally declared here Affected versions (from the ones on kernel.org): * 5.17 - bfb1a7c91fb7 ("x86/bug: Merge annotate_reachable() into _BUG_FLAGS() asm") * 5.16.17 - fe0c95903a68 ("x86/bug: Merge annotate_reachable() into _BUG_FLAGS() asm") Cannot be seen when changing the variable name: diff --git a/arch/x86/include/asm/bug.h b/arch/x86/include/asm/bug.h index bab883c0b6fe..cbd11e38252a 100644 --- a/arch/x86/include/asm/bug.h +++ b/arch/x86/include/asm/bug.h @@ -77,9 +77,9 @@ do { \ */ #define __WARN_FLAGS(flags) \ do { \ - __auto_type f = BUGFLAG_WARNING|(flags); \ + __auto_type __f = BUGFLAG_WARNING|(flags); \ instrumentation_begin(); \ - _BUG_FLAGS(ASM_UD2, f, ASM_REACHABLE); \ + _BUG_FLAGS(ASM_UD2, __f, ASM_REACHABLE); \ instrumentation_end(); \ } while (0)