通过llvm过程识别用户定义函数

通过llvm过程识别用户定义函数,llvm,llvm-clang,llvm-ir,llvm-c++-api,Llvm,Llvm Clang,Llvm Ir,Llvm C++ Api,是否有任何方法可以识别被调用函数是否是用户定义的? 例如: void foo() { printf("hello world again"); } int main() { printf("hello world\n"); foo(); } 在本例中,foo()是一个用户定义函数,而printf()是一个库函数 我当前使用的方法是迭代所有模块,并检查其大小是否大于0。 i、 e: (模块::迭代器F=M.begin();F!=M.end();++F) { 函数&Func=*F

是否有任何方法可以识别被调用函数是否是用户定义的? 例如:

void foo()
{
   printf("hello world again");
}
int main()
{
   printf("hello world\n");
   foo();
}
在本例中,foo()是一个用户定义函数,而printf()是一个库函数

我当前使用的方法是迭代所有模块,并检查其大小是否大于0。 i、 e:

(模块::迭代器F=M.begin();F!=M.end();++F) { 函数&Func=*F; 如果(F->size()>0)
errs()您可以使用
isDeclaration
方法来检查函数是在模块中定义的还是刚刚声明的。这将使您能够区分实现在模块中的函数和预期在模块外部找到的函数。

我使用的方法如何(如上所示)?@AbhinashJain:我认为这两种方法相当于一件事(在引擎盖下
GlobalValue::isDeclaration
检查函数是否为空。然而,
isDeclaration
对我来说似乎更可取,因为它的意图更为明确,并且适用于其他类型的全局变量,比如变量。
for(Module::iterator F = M.begin(); F != M.end(); ++F)
{
    Function &Func = *F;
    if(F->size()>0)
        errs() << "User Define";
}