0

我有一个文件,其中主函数调用了三个测试函数,即测试 1、测试 2 和测试 3。我想通过一次一个删除每两个函数并返回只调用其中一个函数的文件三个测试功能。现在,我的 pass 是一个带有这个 body 的 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 是您在主函数中想要的函数(在本例中为测试 1)

有人可以告诉我我的方法是否正确吗?截至目前,我遇到了分段错误。

4

1 回答 1

0

您需要删除引用已删除函数的invoke/call指令,而不是用 UndefinedValue 替换它们。这可以通过迭代函数的 Def-Use 链并相应地删除值来实现

于 2018-04-13T02:05:44.963 回答