在 LLVM 中的以下代码中
unsigned ii=0;
BasicBlock* Bb = &*i;
TerminatorInst *TI = i->getTerminator();
for( std::set<BasicBlock*>::iterator rit=Result.begin(); rit!=Result.end();++rit,++ii)
{
TI->setSuccessor(ii,(*rit));
errs() << "\n\tBasic block (name=" <<(*rit)->getName() << ")";
}
代码在 Module Pass 中实现时出现以下错误
Basic block (name=if.then)opt: /home/rasha/llvm2/llvm/include/llvm/IR
/Instructions.h:2406: void llvm::BranchInst::setSuccessor(unsigned int, llvm::BasicBlock
*): Assertion `idx < getNumSuccessors() && "Successor # out of range for Branch!"' failed.
0 opt 0x00000000018895be llvm::sys::PrintStackTrace(_IO_FILE*) + 46
是否有一个标准我应该使用将每个基本块的 idx 设置为后继者此外,一旦我删除 ii 的增量,它才不会发出此错误,但结果错误