Search code examples
llvmllvm-clangllvm-irllvm-c++-api

Identifying user define function through llvm pass


Is there anyway by which I can identify whether the callee function is a user define or not? For example:

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

As in this case foo() is a user define, whereas printf() is a library function.

The method I'm currently using is to iterate over all the modules and check if its size is greater than 0 or not. i.e:

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

But am not sure about its accuracy?


Solution

  • You can use the isDeclaration method to check whether the function is defined or just declared in the module. This will let you differentiate between functions whose implementation is in the module and function that are expected to be found outside it.