On 12/3/22 19:54, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@xxxxxxxx> > > gcc-13 slightly changes the type of constant expressions that are defined > in an enum, which triggers a compile time sanity check in libata: > > linux/drivers/ata/libahci.c: In function 'ahci_led_store': > linux/include/linux/compiler_types.h:357:45: error: call to '__compiletime_assert_302' declared with attribute error: BUILD_BUG_ON failed: sizeof(_s) > sizeof(long) > 357 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) > > The new behavior is that sizeof() returns the same value for the > constant as it does for the enum type, which is generally more sensible > and consistent. > > The problem in libata is that it contains a single enum definition for > lots of unrelated constants, some of which are large positive (unsigned) > integers like 0xffffffff, while others like (1<<31) are interpreted as > negative integers, and this forces the enum type to become 64 bit wide > even though most constants would still fit into a signed 32-bit 'int'. > > Fix this by changing the entire enum definition to use BIT(x) in place > of (1<<x), which results in all values being seen as 'unsigned' and > fitting into an unsigned 32-bit type. > > Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107917 > Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107405 > Reported-by: Luis Machado <luis.machado@xxxxxxx> > Cc: linux-ide@xxxxxxxxxxxxxxx > Cc: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Cc: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> Applied to for-6.2. Thanks ! -- Damien Le Moal Western Digital Research