Peter Maydell wrote: > The const_le64() macro introduced in commit 845d80a8c7b187 turns out > to have a bug which means that on big-endian systems the compiler > complains if the argument isn't already a 64-bit type. This hasn't > caused a problem yet, because there are no in-tree uses, but it > means it's not possible for anybody to add one without it failing CI. > > This example is from an attempted use of it with the argument '0', > from the s390 CI runner's gcc: > > ../block/blklogwrites.c: In function ‘blk_log_writes_co_do_log’: > ../include/qemu/bswap.h:148:36: error: left shift count >= width of > type [-Werror=shift-count-overflow] > 148 | ((((_x) & 0x00000000000000ffU) << 56) | \ > | ^~ > ../block/blklogwrites.c:409:27: note: in expansion of macro ‘const_le64’ > 409 | .nr_entries = const_le64(0), > | ^~~~~~~~~~ > ../include/qemu/bswap.h:149:36: error: left shift count >= width of > type [-Werror=shift-count-overflow] > 149 | (((_x) & 0x000000000000ff00U) << 40) | \ > | ^~ > ../block/blklogwrites.c:409:27: note: in expansion of macro ‘const_le64’ > 409 | .nr_entries = const_le64(0), > | ^~~~~~~~~~ > cc1: all warnings being treated as errors > > Fix this by making all the constants in the macro have the ULL > suffix. This will cause them all to be 64-bit integers, which means > the result of the logical & will also be an unsigned 64-bit type, > even if the input to the macro is a smaller type, and so the shifts > will be in range. > > Fixes: 845d80a8c7b187 ("qemu/bswap: Add const_le64()") > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org>
Thanks! Reviewed-by: Ira Weiny <ira.we...@intel.com>