Function* NF= Function::Create(F->getFunctionType(), F->getLinkage());
BasicBlockListType& BList= NF->getBasicBlockList();
for(std::set<BasicBlock*>::iterator xit=BBsetArray[0].begin(); xit!=BBsetArray[0].end();xit++)
{
BList.push_back((*xit));
}
这个代码将基本块插入到函数基本块列表中我得到了以下错误
opt: /home/rasha/llvm2/llvm/lib/IR/SymbolTableListTraitsImpl.h:68: void
llvm::SymbolTableListTraits<llvm::BasicBlock,
llvm::Function>::addNodeToList(ValueSubClass *) [ValueSubClass = llvm::BasicBlock,
ItemParentClass = llvm::Function]: Assertion `V->getParent() == 0 && "Value already in
a container!!"' failed.
答案 0 :(得分:1)
错误消息看起来非常简单:您尝试插入函数的基本块已包含在另一个函数中。
要解决此问题,您可以先在这些块上调用removeFromParent()
,但更好的方法是不移动这些基本块,而是将它们克隆到新函数中 - 这样也可以保持原始函数不变。为此,请查看“llvm / Transforms / Utils / Cloning.h”中的CloneFunction()函数。