diff --git a/AK/Endian.h b/AK/Endian.h index 5ce022eff7b..060f78dc9b3 100644 --- a/AK/Endian.h +++ b/AK/Endian.h @@ -43,11 +43,11 @@ ALWAYS_INLINE constexpr T convert_between_host_and_little_endian(T value) return value; #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ if constexpr (sizeof(T) == 8) - return __builtin_bswap64(value); + return static_cast(__builtin_bswap64(static_cast(value))); if constexpr (sizeof(T) == 4) - return __builtin_bswap32(value); + return static_cast(__builtin_bswap32(static_cast(value))); if constexpr (sizeof(T) == 2) - return __builtin_bswap16(value); + return static_cast(__builtin_bswap16(static_cast(value))); if constexpr (sizeof(T) == 1) return value; #endif @@ -58,11 +58,11 @@ ALWAYS_INLINE constexpr T convert_between_host_and_big_endian(T value) { #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ if constexpr (sizeof(T) == 8) - return __builtin_bswap64(value); + return static_cast(__builtin_bswap64(static_cast(value))); if constexpr (sizeof(T) == 4) - return __builtin_bswap32(value); + return static_cast(__builtin_bswap32(static_cast(value))); if constexpr (sizeof(T) == 2) - return __builtin_bswap16(value); + return static_cast(__builtin_bswap16(static_cast(value))); if constexpr (sizeof(T) == 1) return value; #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ diff --git a/Tests/AK/TestEndian.cpp b/Tests/AK/TestEndian.cpp index 7f7f1a57ffc..d888c0f8428 100644 --- a/Tests/AK/TestEndian.cpp +++ b/Tests/AK/TestEndian.cpp @@ -15,3 +15,15 @@ static_assert(BigEndian { 42 } == 42, "Big endian values should be value co static_assert(LittleEndian {} == 0, "Little endian values should be default constructed in a constexpr context."); static_assert(LittleEndian { 42 } == 42, "Little endian values should be value constructed in a constexpr context."); + +enum class Enum8 : u8 { Element = 1 }; +static_assert(BigEndian { Enum8::Element } == Enum8::Element); + +enum class Enum16 : u16 { Element = 2 }; +static_assert(BigEndian { Enum16::Element } == Enum16::Element); + +enum class Enum32 : u32 { Element = 3 }; +static_assert(BigEndian { Enum32::Element } == Enum32::Element); + +enum class Enum64 : u64 { Element = 4 }; +static_assert(BigEndian { Enum64::Element } == Enum64::Element);