diff --git a/llvm/include/llvm/ADT/bit.h b/llvm/include/llvm/ADT/bit.h --- a/llvm/include/llvm/ADT/bit.h +++ b/llvm/include/llvm/ADT/bit.h @@ -16,10 +16,13 @@ #include "llvm/Support/Compiler.h" #include -#include #include #include +#if !__has_builtin(__builtin_bit_cast) +#include +#endif + #if defined(_MSC_VER) && !defined(_DEBUG) #include // for _byteswap_{ushort,ulong,uint64} #endif @@ -48,9 +51,13 @@ typename = std::enable_if_t::value>, typename = std::enable_if_t::value>> [[nodiscard]] inline To bit_cast(const From &from) noexcept { +#if __has_builtin(__builtin_bit_cast) + return __builtin_bit_cast(To, from); +#else To to; std::memcpy(&to, &from, sizeof(To)); return to; +#endif } /// Reverses the bytes in the given integer value V.