clang相关内容
给定一个 C++ 源代码,我想找到每个函数写入和读取的类字段.使用 Clang 前端执行此操作的最佳方法是什么? (我不是要求对所有步骤进行详细解释;但是,如果能找到一个有效解决方案的起点会很棒.) 到目前为止,我尝试使用 RecursiveASTVisitor 解析语句,但是很难跟踪节点连接.另外,我不知道如何跟踪如下内容: int&x = m_int_field;x++; 这显
..
我想获取传递给函数的参数.例如,如果我有电话 printf("%d%d", i, j); 输出应该是 %d%d i j 我可以在 RecursiveASTVisitor 中使用 VisitCallExpr() 进行函数调用.还能够获取参数的数量和参数类型.但我不知道如何获得参数. bool MyRecursiveASTVisitor::VisitCallExpr (c
..
嗨,我是编译器开发的新手,想知道 AST 是什么样的.我有一小段代码,我使用 Clang 来生成 AST.我没有从中得到太多信息.从它的外观来看,语法树与源代码完全相同,除了一个结构体被添加到我测试的几乎所有样本中. 来源: class A {民众:int *a, *b, *c;国际我;无效总和(){a = new int[5];b = 新 int[5];c = 新整数[5];for (i
..
我正在使用 clang 生成 AST.我有以下文件(lambda.cpp)要解析: #include 无效 my_lambda(){auto lambda = [](auto x, auto y) {return x + y;};std::cout
..
我正在尝试解释您可以在下图中看到的 Clang AST 的部分内容.简而言之,我想做的是检查两个变量在不同的程序点是否相同.检查 AST 后,我注意到 AST 部分之间唯一的共同点是蓝色圈出的部分. 谁能帮助我了解这些十六进制数字在 AST 中对应的内容?我知道第一个块对应一个变量声明,第二个块对应一个表达式.是否有 Stmt 和 Expr 类上的方法可以调用来获取这些十六进制数? 解
..
我正在尝试解释您可以在下图中看到的 Clang AST 的部分内容.简而言之,我想做的是检查两个变量在不同的程序点是否相同.检查 AST 后,我注意到 AST 部分之间唯一的共同点是蓝色圈出的部分. 谁能帮助我了解这些十六进制数字在 AST 中对应的内容?我知道第一个块对应一个变量声明,第二个块对应一个表达式.是否有 Stmt 和 Expr 类上的方法可以调用来获取这些十六进制数? 解
..
我需要向 AST 插入新节点.例如,为函数添加命名空间:转这个 - void foo(); 进入这个 - 命名空间栏{无效的 foo();} 我阅读了如何克隆或创建clang 的 AST Stmt 节点? 但我不喜欢使用源到源编译 Tnx 解决方案 可以在这里找到答案http://clang-developer.42468.n3.nabble.com/Adding-nodes
..
我正在考虑将 Clang 的 AST 用于我的 C 代码,并对 AST 进行一些分析.关于从哪里开始、如何获得 Clang 的 AST、教程或这方面的任何内容的一些指示将有很大帮助!!! 我一直试图找到一些,我得到了这个 link2年前.但由于某种原因,它对我不起作用.教程中的示例代码给了我太多错误.所以我不确定,我是否正确构建了代码,或者教程是否有问题.但我也很乐意从其他页面开始.
..
我正试图抓住 Clang.所以,我想在解析给定程序后查看 Clang 生成的 AST.是否可以以 .dot 或 .viz 格式转储 AST?有什么工具吗? 解决方案 Clang 支持使用 Graphviz 的 dotty 显示 AST -- 你可以抓取生成的临时 .dot 文件(名称被打印出来)获取图源. clang -cc1 -ast-view your_file.c 您还可以使用以
..
我试图匹配传递给 ForStmt 条件的整数值.但是,loopbound 是对 FunctionDecl 的调用,而我似乎没有通过 ParamVarDecl 得到这个. MWE:我的测试示例: void testASTVistor (int N) {N = 123;for (int i = 0; i 这是 AST 转储: FunctionDecl 0x5602066f0db8 col
..
我正在创建 clang 工具,我想从 clang AST 生成 LLVM IR.我知道可以用来获取 *.ll 文件的 -emit-llvm 选项,但是有没有办法在代码中生成 IR?我可以调用的一些方法接受 clang AST 或 AST 上下文并返回 llvm::Module?我找不到任何可以说明这一点的示例. 已编辑:所以我尝试为此使用 CodeGenAction,但我无法让它工作.我最终
..
我需要分析Objective-C静态代码,主要是AST,在查看可能的工具后发现LLVM的Clang工具可以转储AST,所以我用终端用这个命令测试它: clang -cc1 -ast-dump ~/SomeTest.m 但我收到此错误: 在/Users/myusername/SomeTest.m:9 包含的文件中:/Users/myusername/SomeTest.h:9:9: 致命错误:找
..
我可以使用 recursivevisitor 类遍历 clang AST 的特定子树,但我想要做的是逐个节点遍历 clang AST. 如果有人能帮我解决这个问题,我将不胜感激. 提前致谢. 解决方案 RecursiveASTVisitor 可以满足您的需求. 实现成员方法 TraverseDecl(Decl *x), TraverseStmt(Stmt *x) 和 Tr
..
我设法使用 cmake 和 Visual Studio 10 成功地为 windows 编译了 clang.我想获得一个 XML 文件作为源代码的 AST 表示.有一个选项可以在 linux (ubuntu) 下使用带有 gcc 的 clang 提供结果,但在 windows 框上不起作用: clang -cc1 -ast-print-xml source.c 然而,这是调用编译阶段(我想避免
..
以下代码可在各种 gcc 和 clang 版本上编译 - 当使用 gcc 5.3.1 编译和运行时,它会打印 A() 然后以纯虚调用错误中止. #include A级{民众:一种() {printf("A()\n");}虚拟无效 b() const = 0;};int main(){const A&一种{};a.b();返回0;} 我意识到将引用绑定到临时对象并不理想(尽管我认为这
..
以下代码可在各种 gcc 和 clang 版本上编译 - 当使用 gcc 5.3.1 编译和运行时,它会打印 A() 然后以纯虚调用错误中止. #include A级{民众:一种() {printf("A()\n");}虚拟无效 b() const = 0;};int main(){const A&一种{};a.b();返回0;} 我意识到将引用绑定到临时对象并不理想(尽管我认为这
..
关于为什么我不能初始化具有私有复制构造函数的对象数组的现有问题? 特指到 C++03.我从那个问题知道我想要做的在 C++03 中是不允许的,但我认为在 C++11 中应该是可能的 我有一个不可移动的类(称之为 Child),我需要在另一个类的构造函数中初始化一个 Child 数组(称之为 Parent).“不可移动"是指子对象的地址在该对象的生命周期内必须保持不变.这样做的正确方法是什么?
..
是否有任何内置的等效于 _countof 由其他编译器提供,特别是 GCC 和 Clang?有没有非宏表单? 解决方案 我不知道 GCC 有一个,但 Linux 使用 GCC 的 __builtin_types_compatible_p builtin 使他们的 ARRAY_SIZE() 宏更安全(如果应用于指针会导致构建中断): /* &a[0] 降级为指针:与数组不同的类型 */#d
..
我试图在 x86_64 和 aarch64/arm64 上运行的应用程序之间完全匹配行为.但是,当浮点数超出可能的整数范围时,它们的不同之处在于它们如何将浮点数转换为整数. 考虑以下示例: #include #include 无效转换(浮点值){printf("uint32_t(%.2f) = %u\n", value, uint32_t(value));}int main() {演员 (
..
我正在尝试为 arm64 构建一个 C 库(GMP 6.0.0),以便在 iOS 上使用.我正在使用下面的调用运行配置脚本(编译器是使用 xcrun --find 找到的). ./configure \CC="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang"
..