Beispiel #1
0
/// ChangeToCall - Convert the specified invoke into a normal call.
static void ChangeToCall(InvokeInst *II) {
    BasicBlock *BB = II->getParent();
    SmallVector<Value*, 8> Args(II->op_begin()+3, II->op_end());
    CallInst *NewCall = CallInst::Create(II->getCalledValue(), Args.begin(),
                                         Args.end(), "", II);
    NewCall->takeName(II);
    NewCall->setCallingConv(II->getCallingConv());
    NewCall->setParamAttrs(II->getParamAttrs());
    II->replaceAllUsesWith(NewCall);

    // Follow the call by a branch to the normal destination.
    BranchInst::Create(II->getNormalDest(), II);

    // Update PHI nodes in the unwind destination
    II->getUnwindDest()->removePredecessor(BB);
    BB->getInstList().erase(II);
}