diff options
author | Victor Leschuk <vleschuk@accesssoftek.com> | 2016-10-26 21:32:29 +0000 |
---|---|---|
committer | Victor Leschuk <vleschuk@accesssoftek.com> | 2016-10-26 21:32:29 +0000 |
commit | a37660c66945898a8dfce3f40e066595c7742543 (patch) | |
tree | 5a2d99e389d1c41c444a92adfea93ef6ec682f65 /llvm/lib/Bitcode | |
parent | 5ceeb60c6ebc9d1193d8af9f336b6cce5ca9e1d8 (diff) | |
download | bcm5719-llvm-a37660c66945898a8dfce3f40e066595c7742543.tar.gz bcm5719-llvm-a37660c66945898a8dfce3f40e066595c7742543.zip |
DebugInfo: fix incorrect alignment type (NFC)
Change type of some missed DebugInfo-related alignment variables,
that are still uint64_t, to uint32_t.
Original change introduced in r284482.
llvm-svn: 285242
Diffstat (limited to 'llvm/lib/Bitcode')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 9b1adc7f668..f2af9164839 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2742,7 +2742,12 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) { // Upgrade old metadata, which stored a global variable reference or a // ConstantInt here. Metadata *Expr = getMDOrNull(Record[9]); - uint64_t AlignInBits = (Record.size() > 11) ? Record[11] : 0; + uint32_t AlignInBits = 0; + if (Record.size() > 11) { + if (Record[11] > (uint64_t)std::numeric_limits<uint32_t>::max()) + return error("Alignment value is too large"); + AlignInBits = Record[11]; + } GlobalVariable *Attach = nullptr; if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) { if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) { @@ -2782,7 +2787,13 @@ std::error_code BitcodeReader::parseMetadata(bool ModuleLevel) { // this is newer version of record which doesn't have artifical tag. bool HasTag = !HasAlignment && Record.size() > 8; DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7 + HasTag]); - uint64_t AlignInBits = HasAlignment ? Record[8 + HasTag] : 0; + uint32_t AlignInBits = 0; + if (HasAlignment) { + if (Record[8 + HasTag] > + (uint64_t)std::numeric_limits<uint32_t>::max()) + return error("Alignment value is too large"); + AlignInBits = Record[8 + HasTag]; + } MetadataList.assignValue( GET_OR_DISTINCT(DILocalVariable, (Context, getMDOrNull(Record[1 + HasTag]), |