diff --git a/absl/hash/internal/hash.h b/absl/hash/internal/hash.h index f68872fc488..fa4b53f0f8f 100644 --- a/absl/hash/internal/hash.h +++ b/absl/hash/internal/hash.h @@ -809,6 +809,9 @@ AbslHashValue(H hash_state, const std::vector& vector) { for (size_t j = 0; j < 64; ++j) { word |= static_cast(vector[i + j]) << j; } + if constexpr (absl::endian::native == absl::endian::big) { + word = absl::byteswap(word); + } hash_state = combiner.add_buffer( std::move(hash_state), reinterpret_cast(&word), sizeof(word)); @@ -821,6 +824,9 @@ AbslHashValue(H hash_state, const std::vector& vector) { for (size_t j = 0; j < rem; ++j) { word |= static_cast(vector[i + j]) << j; } + if constexpr (absl::endian::native == absl::endian::big) { + word = absl::byteswap(word); + } hash_state = combiner.add_buffer( std::move(hash_state), reinterpret_cast(&word), (rem + 7) / 8); @@ -988,6 +994,9 @@ H AbslHashValue(H hash_state, const std::bitset& set) { for (size_t j = 0; j < 64; ++j) { word |= static_cast(set[i + j]) << j; } + if constexpr (absl::endian::native == absl::endian::big) { + word = absl::byteswap(word); + } hash_state = combiner.add_buffer( std::move(hash_state), reinterpret_cast(&word), sizeof(word)); @@ -1000,6 +1009,9 @@ H AbslHashValue(H hash_state, const std::bitset& set) { for (size_t j = 0; j < rem; ++j) { word |= static_cast(set[i + j]) << j; } + if constexpr (absl::endian::native == absl::endian::big) { + word = absl::byteswap(word); + } hash_state = combiner.add_buffer( std::move(hash_state), reinterpret_cast(&word), (rem + 7) / 8);