通过llvm传递识别用户定义函数

时间:2014-05-29 08:58:28

标签: llvm llvm-clang llvm-ir llvm-c++-api

无论如何,我可以确定被调用函数是否是用户定义? 例如:

void foo()
{
   printf("hello world again");
}
int main()
{
   printf("hello world\n");
   foo();
}

在这种情况下,foo()是用户定义,而printf()是库函数。

我目前使用的方法是迭代所有模块并检查其大小是否大于0。 即:

for(Module::iterator F = M.begin(); F != M.end(); ++F)
{
    Function &Func = *F;
    if(F->size()>0)
        errs() << "User Define";
}

但我不确定它的准确性?

1 个答案:

答案 0 :(得分:7)

您可以使用isDeclaration方法检查函数是已定义还是仅在模块中声明。这将使您可以区分实现在模块中的函数和预期在其外部找到的函数。