diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 9d4be53..ad85066 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -5232,8 +5232,10 @@ Error BitcodeReader::parseFunctionBody(Function *F) { InstructionList.push_back(I); break; } + case bitc::FUNC_CODE_INST_ATOMICRMW_OLD: case bitc::FUNC_CODE_INST_ATOMICRMW: { - // ATOMICRMW:[ptrty, ptr, val, op, vol, ordering, ssid, align?] + // ATOMICRMW_OLD: [ptrty, ptr, val, op, vol, ordering, ssid, align?] + // ATOMICRMW: [ptrty, ptr, valty, val, op, vol, ordering, ssid, align?] const size_t NumRecords = Record.size(); unsigned OpNum = 0; @@ -5245,9 +5247,14 @@ Error BitcodeReader::parseFunctionBody(Function *F) { return error("Invalid record"); Value *Val = nullptr; - if (popValue(Record, OpNum, NextValueNo, - getPointerElementFlatType(FullTy), Val)) - return error("Invalid record"); + if (BitCode == bitc::FUNC_CODE_INST_ATOMICRMW_OLD) { + if (popValue(Record, OpNum, NextValueNo, + getPointerElementFlatType(FullTy), Val)) + return error("Invalid record"); + } else { + if (getValueTypePair(Record, OpNum, NextValueNo, Val)) + return error("Invalid record"); + } if (!(NumRecords == (OpNum + 4) || NumRecords == (OpNum + 5))) return error("Invalid record"); |