Fix for llvm-dis/llvm-bcanalyzer overflows
These tools failed for a very large bitcode file produced by LTO due to
64-bit values being assigned to 32-bit types. For the BitstreamReader.h
fix, the value initially fit into the 32-bit unsigned, but there was an
overflow when multiplying by 32 furter below to compute the bit offset.
No test case in the patch as this requires a huge bitcode file.
Reviewers: pcc, george.karpenkov
Subscribers: mehdi_amini, a.sidorin, llvm-commits
Differential Revision: https://reviews.llvm.org/D47731
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@333942 91177308-0d34-0410-b5e6-96231b3b80d8
2 years ago
// don't care what code widths are used inside of it.
|unsigned NumFourBytes = Read(bitc::BlockSizeWidth);⏎
NumFourBytes = Read(bitc::BlockSizeWidth);⏎
// Check that the block wasn't partially defined, and that the offset isn't
|nsigned CurrentRecordPos = Stream.GetCurrentBitNo();⏎
u CurrentRecordPos = Stream.GetCurrentBitNo();⏎
unsigned Code = Stream.readRecord(Entry.ID, Record, &Blob);
// Increment the # occurrences of this code.