[BitcodeReader] bitc::CST_CODE_INLINEASM: un-hardcode offsets
This commit is contained in:
@@ -2860,22 +2860,26 @@ Error BitcodeReader::parseConstants() {
|
||||
case bitc::CST_CODE_INLINEASM: {
|
||||
if (Record.size() < 2)
|
||||
return error("Invalid record");
|
||||
unsigned OpNum = 0;
|
||||
std::string AsmStr, ConstrStr;
|
||||
bool HasSideEffects = Record[0] & 1;
|
||||
bool IsAlignStack = (Record[0] >> 1) & 1;
|
||||
unsigned AsmDialect = (Record[0] >> 2) & 1;
|
||||
bool CanThrow = (Record[0] >> 3) & 1;
|
||||
unsigned AsmStrSize = Record[1];
|
||||
if (2 + AsmStrSize >= Record.size())
|
||||
bool HasSideEffects = Record[OpNum] & 1;
|
||||
bool IsAlignStack = (Record[OpNum] >> 1) & 1;
|
||||
unsigned AsmDialect = (Record[OpNum] >> 2) & 1;
|
||||
bool CanThrow = (Record[OpNum] >> 3) & 1;
|
||||
++OpNum;
|
||||
unsigned AsmStrSize = Record[OpNum];
|
||||
++OpNum;
|
||||
if (OpNum + AsmStrSize >= Record.size())
|
||||
return error("Invalid record");
|
||||
unsigned ConstStrSize = Record[2 + AsmStrSize];
|
||||
if (3 + AsmStrSize + ConstStrSize > Record.size())
|
||||
unsigned ConstStrSize = Record[OpNum + AsmStrSize];
|
||||
if (OpNum + 1 + AsmStrSize + ConstStrSize > Record.size())
|
||||
return error("Invalid record");
|
||||
|
||||
for (unsigned i = 0; i != AsmStrSize; ++i)
|
||||
AsmStr += (char)Record[2 + i];
|
||||
AsmStr += (char)Record[OpNum + i];
|
||||
++OpNum;
|
||||
for (unsigned i = 0; i != ConstStrSize; ++i)
|
||||
ConstrStr += (char)Record[3 + AsmStrSize + i];
|
||||
ConstrStr += (char)Record[OpNum + AsmStrSize + i];
|
||||
UpgradeInlineAsmString(&AsmStr);
|
||||
V = InlineAsm::get(
|
||||
cast<FunctionType>(cast<PointerType>(CurTy)->getElementType()),
|
||||
|
||||
Reference in New Issue
Block a user