Messages in this thread | | | Date | Wed, 8 Jun 2022 13:09:40 -0700 | From | Andrew Morton <> | Subject | Re: [PATCH v2] include/uapi/linux/swab.h: move explicit cast outside ternary |
| |
On Tue, 7 Jun 2022 17:14:22 -0700 Justin Stitt <jstitt007@gmail.com> wrote:
> A cast inside __builtin_constant_p doesn't do anything since it should evaluate > as constant at compile time irrespective of this cast. Instead, I moved this > cast outside the ternary to ensure the return type is as expected. > > For instance, if __HAVE_BUILTIN_BSWAP16__ was not defined then __swab16 is > actually returning an `int` not a `u16` due to integer promotion as described > by Nick in this thread. This has repercussions when building with clang > -Wformat. This fix should solve many of these warnings. >
ARM allmodconfig:
In file included from ./include/linux/swab.h:5, from ./arch/arm/include/asm/opcodes.h:86, from ./arch/arm/include/asm/bug.h:7, from ./include/linux/bug.h:5, from ./include/linux/mmdebug.h:5, from ./include/linux/gfp.h:5, from ./include/linux/slab.h:15, from ./fs/xfs/kmem.h:9, from ./fs/xfs/xfs_linux.h:24, from ./fs/xfs/xfs.h:22, from fs/xfs/scrub/agheader.c:6: fs/xfs/scrub/agheader.c: In function 'xchk_superblock': ./include/uapi/linux/byteorder/little_endian.h:42:52: error: unsigned conversion from 'int' to 'short unsigned int' changes value from '-49265' to '16271' [-Werror=overflow] 42 | #define __cpu_to_be16(x) ((__force __be16)__swab16((x))) | ^~~ ./include/uapi/linux/swab.h:102:46: note: in definition of macro '__swab16' 102 | #define __swab16(x) (__u16)__builtin_bswap16(x) | ^ ./include/linux/byteorder/generic.h:96:21: note: in expansion of macro '__cpu_to_be16' 96 | #define cpu_to_be16 __cpu_to_be16 | ^~~~~~~~~~~~~ fs/xfs/scrub/agheader.c:158:23: note: in expansion of macro 'cpu_to_be16' 158 | vernum_mask = cpu_to_be16(~XFS_SB_VERSION_OKBITS | | ^~~~~~~~~~~ cc1: all warnings being treated as errors make[2]: *** [scripts/Makefile.build:249: fs/xfs/scrub/agheader.o] Error 1 make[1]: *** [scripts/Makefile.build:466: fs/xfs] Error 2 make: *** [Makefile:1839: fs] Error 2
| |