Идентификация определяющей пользователя функции через lvm pass
Есть ли способ, с помощью которого я могу определить, является ли функция вызываемого абонента пользовательской или нет? Например:
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 ответ
Решение
Вы можете использовать isDeclaration
метод, чтобы проверить, определена ли функция или просто объявлена в модуле. Это позволит вам различать функции, реализация которых находится в модуле, и функции, которые, как ожидается, находятся за его пределами.