Index: llvm/include/llvm/Bitstream/BitstreamReader.h =================================================================== --- llvm/include/llvm/Bitstream/BitstreamReader.h +++ llvm/include/llvm/Bitstream/BitstreamReader.h @@ -115,7 +115,7 @@ /// Return the bit # of the bit we are reading. uint64_t GetCurrentBitNo() const { - return NextChar*CHAR_BIT - BitsInCurWord; + return uint64_t(NextChar)*CHAR_BIT - BitsInCurWord; } // Return the byte # of the current bit. Index: llvm/include/llvm/Bitstream/BitstreamWriter.h =================================================================== --- llvm/include/llvm/Bitstream/BitstreamWriter.h +++ llvm/include/llvm/Bitstream/BitstreamWriter.h @@ -111,7 +111,7 @@ /// valid. Flushing only occurs at (sub)block boundaries. BitstreamWriter(SmallVectorImpl &O, raw_fd_stream *FS = nullptr, uint32_t FlushThreshold = 512) - : Out(O), FS(FS), FlushThreshold(FlushThreshold << 20), CurBit(0), + : Out(O), FS(FS), FlushThreshold(uint64_t(FlushThreshold) << 20), CurBit(0), CurValue(0), CurCodeSize(2) {} ~BitstreamWriter() {