• Arnd Bergmann's avatar
    ata: ahci: fix enum constants for gcc-13 · f0778807
    Arnd Bergmann authored
    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=107405Reported-by: default avatarLuis Machado <luis.machado@arm.com>
    Cc: linux-ide@vger.kernel.org
    Cc: Damien Le Moal <damien.lemoal@opensource.wdc.com>
    Cc: stable@vger.kernel.org
    Cc: Randy Dunlap <rdunlap@infradead.org>
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Tested-by: default avatarLuis Machado <luis.machado@arm.com>
    Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
    f0778807
ahci.h 16.9 KB