From 1416bf5f8d9be6cda53265c5ae0c0848d9510ba6 Mon Sep 17 00:00:00 2001 From: klzgrad Date: Thu, 21 Sep 2023 20:48:53 +0800 Subject: [PATCH] quiche: Work around Clang miscompile on mipsel --- .../src/quiche/http2/hpack/huffman/hpack_huffman_decoder.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/net/third_party/quiche/src/quiche/http2/hpack/huffman/hpack_huffman_decoder.h b/src/net/third_party/quiche/src/quiche/http2/hpack/huffman/hpack_huffman_decoder.h index 910aba592d..93f3b8b782 100644 --- a/src/net/third_party/quiche/src/quiche/http2/hpack/huffman/hpack_huffman_decoder.h +++ b/src/net/third_party/quiche/src/quiche/http2/hpack/huffman/hpack_huffman_decoder.h @@ -23,6 +23,10 @@ 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 // that have not yet been decoded, but have been extracted from the encoded // 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 // add to the accumulator. typedef uint64_t HuffmanAccumulator; +#endif typedef size_t HuffmanAccumulatorBitCount; // HuffmanBitBuffer stores the leading edge of bits to be decoded. The high