forked from OSchip/llvm-project
Bitcode: Fix more unsigned integer overflow bugs.
llvm-svn: 251464
This commit is contained in:
parent
75bf203def
commit
128a9760e0
|
@ -47,9 +47,9 @@ class BitstreamWriter {
|
|||
|
||||
struct Block {
|
||||
unsigned PrevCodeSize;
|
||||
unsigned StartSizeWord;
|
||||
size_t StartSizeWord;
|
||||
std::vector<IntrusiveRefCntPtr<BitCodeAbbrev>> PrevAbbrevs;
|
||||
Block(unsigned PCS, unsigned SSW) : PrevCodeSize(PCS), StartSizeWord(SSW) {}
|
||||
Block(unsigned PCS, size_t SSW) : PrevCodeSize(PCS), StartSizeWord(SSW) {}
|
||||
};
|
||||
|
||||
/// BlockScope - This tracks the current blocks that we have entered.
|
||||
|
@ -73,12 +73,12 @@ class BitstreamWriter {
|
|||
reinterpret_cast<const char *>(&Value + 1));
|
||||
}
|
||||
|
||||
unsigned GetBufferOffset() const {
|
||||
size_t GetBufferOffset() const {
|
||||
return Out.size();
|
||||
}
|
||||
|
||||
unsigned GetWordIndex() const {
|
||||
unsigned Offset = GetBufferOffset();
|
||||
size_t GetWordIndex() const {
|
||||
size_t Offset = GetBufferOffset();
|
||||
assert((Offset & 3) == 0 && "Not 32-bit aligned");
|
||||
return Offset / 4;
|
||||
}
|
||||
|
@ -211,7 +211,7 @@ public:
|
|||
EmitVBR(CodeLen, bitc::CodeLenWidth);
|
||||
FlushToWord();
|
||||
|
||||
unsigned BlockSizeWordIndex = GetWordIndex();
|
||||
size_t BlockSizeWordIndex = GetWordIndex();
|
||||
unsigned OldCodeSize = CurCodeSize;
|
||||
|
||||
// Emit a placeholder, which will be replaced when the block is popped.
|
||||
|
@ -242,7 +242,7 @@ public:
|
|||
FlushToWord();
|
||||
|
||||
// Compute the size of the block, in words, not counting the size field.
|
||||
unsigned SizeInWords = GetWordIndex() - B.StartSizeWord - 1;
|
||||
size_t SizeInWords = GetWordIndex() - B.StartSizeWord - 1;
|
||||
uint64_t BitNo = uint64_t(B.StartSizeWord) * 32;
|
||||
|
||||
// Update the block size field in the header of this sub-block.
|
||||
|
|
|
@ -151,7 +151,7 @@ class BitcodeReader : public GVMaterializer {
|
|||
// Last function offset found in the VST.
|
||||
uint64_t LastFunctionBlockBit = 0;
|
||||
bool SeenValueSymbolTable = false;
|
||||
unsigned VSTOffset = 0;
|
||||
uint64_t VSTOffset = 0;
|
||||
// Contains an arbitrary and optional string identifying the bitcode producer
|
||||
std::string ProducerIdentification;
|
||||
|
||||
|
@ -388,7 +388,7 @@ private:
|
|||
|
||||
ErrorOr<Value *> recordValue(SmallVectorImpl<uint64_t> &Record,
|
||||
unsigned NameIndex, Triple &TT);
|
||||
std::error_code parseValueSymbolTable(unsigned Offset = 0);
|
||||
std::error_code parseValueSymbolTable(uint64_t Offset = 0);
|
||||
std::error_code parseConstants();
|
||||
std::error_code rememberAndSkipFunctionBodies();
|
||||
std::error_code rememberAndSkipFunctionBody();
|
||||
|
@ -1764,7 +1764,7 @@ ErrorOr<Value *> BitcodeReader::recordValue(SmallVectorImpl<uint64_t> &Record,
|
|||
|
||||
/// Parse the value symbol table at either the current parsing location or
|
||||
/// at the given bit offset if provided.
|
||||
std::error_code BitcodeReader::parseValueSymbolTable(unsigned Offset) {
|
||||
std::error_code BitcodeReader::parseValueSymbolTable(uint64_t Offset) {
|
||||
uint64_t CurrentBit;
|
||||
// Pass in the Offset to distinguish between calling for the module-level
|
||||
// VST (where we want to jump to the VST offset) and the function-level
|
||||
|
|
Loading…
Reference in New Issue