检查函数是否在LLVM-IR中是用户定义的

时间:2017-12-17 16:18:10

标签: llvm llvm-clang llvm-ir

我正在写一个LLVM传递,只有在用户定义(由源文件中的用户定义)时才打印函数名。

我找不到任何方法来区分用户定义的函数和初始化函数(或静态构造函数)。我尝试检查函数是刚刚声明还是已定义,但它不起作用,因为定义了一些init函数(如__cxx_global_var_init)。

1 个答案:

答案 0 :(得分:0)

在通过时,我知道无法完成你想要做的事情。

那就是说,Clang提供了一种在初始编译期间确定这一点的方法。见:clang::SourceManager::isInSystemHeader()。你必须编写一个Clang插件或一个基于libTooling的程序来利用这个,因为一旦执行opt就会消失信息。这是一个使用AST访问者如何这样做的人为例子:

bool VisitFunctionDecl(clang::FunctionDecl* funcDecl)
{
  if (sourceManager.isInSystemHeader(funcDecl->getLocStart()))
  {
    return true;
  }
}