2

是否有任何辅助方法来遍历 LLVM 编译器为 C 代码生成的 AST、基本块等?

4

2 回答 2

1

如果您尝试加载模块(从 .c 文件编译的 .bc 文件clang -emit-llvm)并遍历其功能、基本块等,那么您可能需要从llvm::Moduleclass开始。它具有遍历全局变量和函数的函数。然后llvm::Function该类具有遍历基本块的功能。然后llvm::BasicBlock该类具有用于迭代指令的功能。

或者,如果您愿意,可以遍历 Clang 创建的 AST 结构。这是一些示例代码:http ://eli.thegreenplace.net/2012/06/08/basic-source-to-source-transformation-with-clang/ 。

于 2013-01-22T00:44:14.920 回答
0

基本上,不可能对 LLVM 中的 AST 进行完整的操作。因为 LLVM 通行证在位码级别上工作,而不是在 AST 上。我认为你想要的是一个 AST 迭代器。

您可以参考Artem Degrachev: Clang Static Analyzer: A Checker Developer's Guide中的第 3 章。

Clang 现在有一个供检查器开发人员使用的页面。您可以通过链接找到更多信息。

于 2020-04-19T08:48:53.213 回答