clang相关内容

如何使用 Clang 查找所有成员字段读/写?

给定一个 C++ 源代码,我想找到每个函数写入和读取的类字段.使用 Clang 前端执行此操作的最佳方法是什么? (我不是要求对所有步骤进行详细解释;但是,如果能找到一个有效解决方案的起点会很棒.) 到目前为止,我尝试使用 RecursiveASTVisitor 解析语句,但是很难跟踪节点连接.另外,我不知道如何跟踪如下内容: int&x = m_int_field;x++; 这显 ..

Clang:AST(抽象语法树)是什么样的?

嗨,我是编译器开发的新手,想知道 AST 是什么样的.我有一小段代码,我使用 Clang 来生成 AST.我没有从中得到太多信息.从它的外观来看,语法树与源代码完全相同,除了一个结构体被添加到我测试的几乎所有样本中. 来源: class A {民众:int *a, *b, *c;国际我;无效总和(){a = new int[5];b = 新 int[5];c = 新整数[5];for (i ..
发布时间:2021-11-26 17:54:13 C/C++开发

Clang AST 解释

我正在尝试解释您可以在下图中看到的 Clang AST 的部分内容.简而言之,我想做的是检查两个变量在不同的程序点是否相同.检查 AST 后,我注意到 AST 部分之间唯一的共同点是蓝色圈出的部分. 谁能帮助我了解这些十六进制数字在 AST 中对应的内容?我知道第一个块对应一个变量声明,第二个块对应一个表达式.是否有 Stmt 和 Expr 类上的方法可以调用来获取这些十六进制数? 解 ..
发布时间:2021-11-26 17:51:29 其他开发

Clang AST 解释

我正在尝试解释您可以在下图中看到的 Clang AST 的部分内容.简而言之,我想做的是检查两个变量在不同的程序点是否相同.检查 AST 后,我注意到 AST 部分之间唯一的共同点是蓝色圈出的部分. 谁能帮助我了解这些十六进制数字在 AST 中对应的内容?我知道第一个块对应一个变量声明,第二个块对应一个表达式.是否有 Stmt 和 Expr 类上的方法可以调用来获取这些十六进制数? 解 ..
发布时间:2021-11-26 17:51:17 其他开发

将节点添加到 Clang 的 AST

我需要向 AST 插入新节点.例如,为函数添加命名空间:转这个 - void foo(); 进入这个 - 命名空间栏{无效的 foo();} 我阅读了如何克隆或创建clang 的 AST Stmt 节点? 但我不喜欢使用源到源编译 Tnx 解决方案 可以在这里找到答案http://clang-developer.42468.n3.nabble.com/Adding-nodes ..
发布时间:2021-11-26 17:47:07 其他开发

如何使用 Clang 的 AST?

我正在考虑将 Clang 的 AST 用于我的 C 代码,并对 AST 进行一些分析.关于从哪里开始、如何获得 Clang 的 AST、教程或这方面的任何内容的一些指示将有很大帮助!!! 我一直试图找到一些,我得到了这个 link2年前.但由于某种原因,它对我不起作用.教程中的示例代码给了我太多错误.所以我不确定,我是否正确构建了代码,或者教程是否有问题.但我也很乐意从其他页面开始. ..
发布时间:2021-11-26 17:45:18 其他开发

如何查看 Clang AST?

我正试图抓住 Clang.所以,我想在解析给定程序后查看 Clang 生成的 AST.是否可以以 .dot 或 .viz 格式转储 AST?有什么工具吗? 解决方案 Clang 支持使用 Graphviz 的 dotty 显示 AST -- 你可以抓取生成的临时 .dot 文件(名称被打印出来)获取图源. clang -cc1 -ast-view your_file.c 您还可以使用以 ..
发布时间:2021-11-26 17:44:38 其他开发

创建LLVM IR的方法

我正在创建 clang 工具,我想从 clang AST 生成 LLVM IR.我知道可以用来获取 *.ll 文件的 -emit-llvm 选项,但是有没有办法在代码中生成 IR?我可以调用的一些方法接受 clang AST 或 AST 上下文并返回 llvm::Module?我找不到任何可以说明这一点的示例. 已编辑:所以我尝试为此使用 CodeGenAction,但我无法让它工作.我最终 ..
发布时间:2021-11-26 17:43:27 其他开发

如何遍历clang AST的所有节点?

我可以使用 recursivevisitor 类遍历 clang AST 的特定子树,但我想要做的是逐个节点遍历 clang AST. 如果有人能帮我解决这个问题,我将不胜感激. 提前致谢. 解决方案 RecursiveASTVisitor 可以满足您的需求. 实现成员方法 TraverseDecl(Decl *x), TraverseStmt(Stmt *x) 和 Tr ..
发布时间:2021-11-26 17:41:26 C/C++开发

我可以在不使用编译器的情况下使用 clang 获得 C/C++ 代码的 XML AST 转储吗?

我设法使用 cmake 和 Visual Studio 10 成功地为 windows 编译了 clang.我想获得一个 XML 文件作为源代码的 AST 表示.有一个选项可以在 linux (ubuntu) 下使用带有 gcc 的 clang 提供结果,但在 windows 框上不起作用: clang -cc1 -ast-print-xml source.c 然而,这是调用编译阶段(我想避免 ..
发布时间:2021-11-26 17:39:57 其他开发

如何使用已删除的复制构造函数初始化类数组 (C++11)

关于为什么我不能初始化具有私有复制构造函数的对象数组的现有问题? 特指到 C++03.我从那个问题知道我想要做的在 C++03 中是不允许的,但我认为在 C++11 中应该是可能的 我有一个不可移动的类(称之为 Child),我需要在另一个类的构造函数中初始化一个 Child 数组(称之为 Parent).“不可移动"是指子对象的地址在该对象的生命周期内必须保持不变.这样做的正确方法是什么? ..
发布时间:2021-11-18 04:16:29 C/C++开发

等价于其他编译器中的 MSVC _countof?

是否有任何内置的等效于 _countof 由其他编译器提供,特别是 GCC 和 Clang?有没有非宏表单? 解决方案 我不知道 GCC 有一个,但 Linux 使用 GCC 的 __builtin_types_compatible_p builtin 使他们的 ARRAY_SIZE() 宏更安全(如果应用于指针会导致构建中断): /* &a[0] 降级为指针:与数组不同的类型 */#d ..
发布时间:2021-11-18 02:43:11 其他开发

在 aarch64/arm64 上使用环绕将 float 转换为 int

我试图在 x86_64 和 aarch64/arm64 上运行的应用程序之间完全匹配行为.但是,当浮点数超出可能的整数范围时,它们的不同之处在于它们如何将浮点数转换为整数. 考虑以下示例: #include #include 无效转换(浮点值){printf("uint32_t(%.2f) = %u\n", value, uint32_t(value));}int main() {演员 ( ..
发布时间:2021-11-17 22:47:47 C/C++开发

为 arm64 iOS 构建 C 库 (GMP)

我正在尝试为 arm64 构建一个 C 库(GMP 6.0.0),以便在 iOS 上使用.我正在使用下面的调用运行配置脚本(编译器是使用 xcrun --find 找到的). ./configure \CC="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" ..
发布时间:2021-11-17 22:46:10 移动开发