我有一个文件,其中main函数调用三个测试函数,即test 1,test 2和test 3.我想创建一个传递,逐个删除每两个函数并返回调用的文件只有三个测试功能中的一个。现在,我的传球是这个身体的ModulePass:
for(Module::iterator F= M.begin(), E = M.end(); F != E; ++F) // iterating over functions in a module
{
std::string function_name = F->getName();
if((std::find(calledFunctions.begin(), calledFunctions.end(), function_name) != calledFunctions.end())
&& function_name != current_function )
{
F->replaceAllUsesWith(UndefValue::get(F->getType()));
F->removeFromParent();
}
}
其中被调用的函数包含您想要的函数(例如,测试2和测试3),current_function是您在主函数中想要的函数(在这种情况下为test 1)
有人可以告诉我,我的方法是否正确?截至目前,我遇到了分段错误。
答案 0 :(得分:0)
您需要删除引用已删除功能的invoke
/ call
说明,而不是使用UndefinedValue替换它们。这可以通过迭代函数的Def-Use Chain并相应地删除值来实现