quiche: Work around Clang miscompile on mipsel

This commit is contained in:
klzgrad 2023-09-21 20:48:53 +08:00
parent 634cc083bd
commit 1416bf5f8d

View File

@ -23,6 +23,10 @@
namespace http2 { namespace http2 {
#if defined(__MIPSEL__) && !defined(__LP64__)
// Clang 18+ miscompiles "uint64_t x; size_t y; x <<= y;" on mipsel.
typedef uint32_t HuffmanAccumulator;
#else
// HuffmanAccumulator is used to store bits during decoding, e.g. next N bits // HuffmanAccumulator is used to store bits during decoding, e.g. next N bits
// that have not yet been decoded, but have been extracted from the encoded // that have not yet been decoded, but have been extracted from the encoded
// string). An advantage of using a uint64 for the accumulator // string). An advantage of using a uint64 for the accumulator
@ -34,6 +38,7 @@ namespace http2 {
// reach 30), and then keep track of the last two bits we've not been able to // reach 30), and then keep track of the last two bits we've not been able to
// add to the accumulator. // add to the accumulator.
typedef uint64_t HuffmanAccumulator; typedef uint64_t HuffmanAccumulator;
#endif
typedef size_t HuffmanAccumulatorBitCount; typedef size_t HuffmanAccumulatorBitCount;
// HuffmanBitBuffer stores the leading edge of bits to be decoded. The high // HuffmanBitBuffer stores the leading edge of bits to be decoded. The high