1
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.
4

1 回答 1

1

错误消息似乎很简单:您尝试插入函数的基本块已经包含在另一个函数中。

要解决这个问题,您可以首先调用removeFromParent()这些块,但更好的方法不是移动这些基本块,而是将它们克隆到一个新函数中——这种方式也使原始函数保持不变。为此,请查看“llvm/Transforms/Utils/Cloning.h”中的CloneFunction()函数。

于 2013-08-05T12:15:44.753 回答