[IR] Give catchret an optional 'return value' operand
Some personality routines require funclet exit points to be clearly marked, this is done by producing a token at the funclet pad and consuming it at the corresponding ret instruction. CleanupReturnInst already had a spot for this operand but CatchReturnInst did not. Other personality routines don't need to use this which is why it has been made optional. llvm-svn: 245149
This commit is contained in:
@@ -3847,12 +3847,18 @@ std::error_code BitcodeReader::parseFunctionBody(Function *F) {
|
||||
break;
|
||||
}
|
||||
case bitc::FUNC_CODE_INST_CATCHRET: { // CATCHRET: [bb#]
|
||||
if (Record.size() != 1)
|
||||
if (Record.size() != 1 && Record.size() != 3)
|
||||
return error("Invalid record");
|
||||
BasicBlock *BB = getBasicBlock(Record[0]);
|
||||
unsigned Idx = 0;
|
||||
BasicBlock *BB = getBasicBlock(Record[Idx++]);
|
||||
if (!BB)
|
||||
return error("Invalid record");
|
||||
I = CatchReturnInst::Create(BB);
|
||||
Value *RetVal = nullptr;
|
||||
if (Record.size() == 3 &&
|
||||
getValueTypePair(Record, Idx, NextValueNo, RetVal))
|
||||
return error("Invalid record");
|
||||
|
||||
I = CatchReturnInst::Create(BB, RetVal);
|
||||
InstructionList.push_back(I);
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user