mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-19 00:14:20 +00:00
Fix really nasty bugs in the CWriter, handling invoke instructions. Tracking
these down was NOT phun. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8181 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3b6b6ba4be
commit
fd04561e1b
@ -894,7 +894,8 @@ void CWriter::printFunction(Function *F) {
|
||||
UI != UE; ++UI)
|
||||
if (TerminatorInst *TI = dyn_cast<TerminatorInst>(*UI))
|
||||
if (TI != Prev->getTerminator() ||
|
||||
isa<SwitchInst>(Prev->getTerminator())) {
|
||||
isa<SwitchInst>(Prev->getTerminator()) ||
|
||||
isa<InvokeInst>(Prev->getTerminator())) {
|
||||
NeedsLabel = true;
|
||||
break;
|
||||
}
|
||||
@ -968,6 +969,8 @@ void CWriter::visitInvokeInst(InvokeInst &II) {
|
||||
Out << " }\n"
|
||||
<< " __llvm_jmpbuf_list = &Entry;\n"
|
||||
<< " ";
|
||||
|
||||
if (II.getType() != Type::VoidTy) outputLValue(&II);
|
||||
visitCallSite(&II);
|
||||
Out << ";\n"
|
||||
<< " __llvm_jmpbuf_list = Entry.next;\n"
|
||||
@ -998,7 +1001,7 @@ void CWriter::printBranchToBlock(BasicBlock *CurBB, BasicBlock *Succ,
|
||||
Out << "; /* for PHI node */\n";
|
||||
}
|
||||
|
||||
if (CurBB->getNext() != Succ) {
|
||||
if (CurBB->getNext() != Succ || isa<InvokeInst>(CurBB->getTerminator())) {
|
||||
Out << std::string(Indent, ' ') << " goto ";
|
||||
writeOperand(Succ);
|
||||
Out << ";\n";
|
||||
|
@ -894,7 +894,8 @@ void CWriter::printFunction(Function *F) {
|
||||
UI != UE; ++UI)
|
||||
if (TerminatorInst *TI = dyn_cast<TerminatorInst>(*UI))
|
||||
if (TI != Prev->getTerminator() ||
|
||||
isa<SwitchInst>(Prev->getTerminator())) {
|
||||
isa<SwitchInst>(Prev->getTerminator()) ||
|
||||
isa<InvokeInst>(Prev->getTerminator())) {
|
||||
NeedsLabel = true;
|
||||
break;
|
||||
}
|
||||
@ -968,6 +969,8 @@ void CWriter::visitInvokeInst(InvokeInst &II) {
|
||||
Out << " }\n"
|
||||
<< " __llvm_jmpbuf_list = &Entry;\n"
|
||||
<< " ";
|
||||
|
||||
if (II.getType() != Type::VoidTy) outputLValue(&II);
|
||||
visitCallSite(&II);
|
||||
Out << ";\n"
|
||||
<< " __llvm_jmpbuf_list = Entry.next;\n"
|
||||
@ -998,7 +1001,7 @@ void CWriter::printBranchToBlock(BasicBlock *CurBB, BasicBlock *Succ,
|
||||
Out << "; /* for PHI node */\n";
|
||||
}
|
||||
|
||||
if (CurBB->getNext() != Succ) {
|
||||
if (CurBB->getNext() != Succ || isa<InvokeInst>(CurBB->getTerminator())) {
|
||||
Out << std::string(Indent, ' ') << " goto ";
|
||||
writeOperand(Succ);
|
||||
Out << ";\n";
|
||||
|
Loading…
x
Reference in New Issue
Block a user