通过使用opt ,我们可以运行自定义 pass,或者在 foo.ll 文件上运行 -O1 -O2 -O3 pass 管道,但是这一切都发生在命令行上,并且 IR 是文件形式。这不利于在您自己的项目中以内存形式对IR进行一些优化(每个IR文件都是内存形式的模块)。 通过 opt 的方式,就像这样: ...
通过使用opt ,我们可以运行自定义 pass,或者在 foo.ll 文件上运行 -O1 -O2 -O3 pass 管道,但是这一切都发生在命令行上,并且 IR 是文件形式。这不利于在您自己的项目中以内存形式对IR进行一些优化(每个IR文件都是内存形式的模块)。 通过 opt 的方式,就像这样: ...
我们知道IR文件可以通过clang驱动从foo.cpp中获取: clang++ -emit-llvm -S foo.cpp -o foo.ll 现在我想通过使用没有 clang 驱动程序的 libTooling 的 API 来做到这一点。 但是不知道这些API是怎么用的,想知道有没有一些使用的 ...
使用clang::tooling::runToolOnCode我可以提供std::string输入,但我只得到一个bool output。static const char *const from = "#include <string.h>\n" ...
我正在编写某种工具来提取 C++ 代码的接口定义。 在编写过程中,我决定将解析器限制为仅处理显式标记为要处理的代码,并且我认为 C++ 属性是最好的方法。 我更愿意为我要导出的实体添加例如[[export]]注释,但我意识到 libTooling 无法看到自定义属性,除非在 Clang 代码本身中 ...
根据文档,我有以下 cmake 项目 但是当我尝试构建项目时,出现以下错误 我已经从archlinux的存储库安装了llvm package ...
我按照https://clang.llvm.org/docs/LibASTMatchersTutorial.html编写了自己的 clang 工具 该工具的目的是根据特定的源文件生成图表。 到目前为止,作为原型,我使用了一些没有任何依赖项的基本 cpp 代码。 然而,目标项目很大并且使用 CMake ...
考虑foo.cc中的以下结构定义: 因为bar具有引用类型,所以隐式平凡的默认构造函数Foo::Foo()被隐式删除。 然而,这一事实似乎并没有反映在 clang 生成的 AST 中。 例如运行clang -Xclang -ast-dump foo.cc会导致:`-CXXRecordDecl 0x ...
假设我有一个像这样的虚拟 class : 其中的 AST 转储如下所示: ... |-CXXRecordDecl 0x5610df147d60 <col:1, col:7> col:7 implicit class Stack |-AccessSpecDecl 0x5610df ...
我正在尝试搜索ifStmt s,它不是else if 。 为了实现这一点,我想测试 Stmt 是否有父级,它不是ifStmt(hasElse(ifStmt(equals(<myCurrentNode>)))) 以下显然不起作用,但我找不到更好的解决方案。 ...
我想编写一个重构工具,我想将光标处的 function(光标在 function 名称中)移动到源文件中。 我在https://github.com/lanl/CoARCT中找到了 FunctionMover.cc,这是移动 function 的良好起点。 但是,我找不到任何如何从文件:行:列(或 ...
由于来自标题的错误,我使用 clang-libtooling 的项目无法编译。 错误是: C:\\llvm\\llvm\\include\\llvm\\Support\\MathExtras.h(372,31): error C4146: unary minus operator applied t ...
我使用 Clang Libtooling 制作了 C/C++ 源代码修改工具。 在测试程序上执行我的工具时遇到以下错误。 但我希望该工具忽略此限制,打印所有错误,并照常执行 AST 修改。 有没有办法使用 Clang Libtooling 解决这个问题? ...
我们的项目正在使用 clang python api 为 C++ 类生成 python 绑定。 现在我们有一个限制,即只有在类型具有显式定义的复制构造函数时才会公开副本。 我想将其更改为还为生成的复制构造函数声明一个副本 - 所以我需要以某种方式检测它。 我关心的所有结构都是可简单复制的,所以如 ...
有没有办法在基于 libtooling 的程序中将构造函数 arguments 传递给从clang::ASTFrontendAction继承的类? 我在网上找到的所有示例都如下所示: 但是如果SomeFrontendAction需要注意,即工具用户传入的选项怎么办? 如何将它们传递给SomeFro ...
我尝试过的代码如下: getBase()应该打印数组标识符,但它正在打印地址,例如0x559f7da7e838 。 如何打印数组名称/标识符? 例如,在arr[i] = 40 的情况下; 我想打印arr ...
例如,我收到一个class alt::VectorLayout<int, 4>作为 ClassTemplateSpecializationDecl,我正在尝试处理 class 的字段和方法,但它在定义数据为 Z37A62586649A 的断言上失败。 我假设模板特化是一个前向声明,所以 ...
我有一个基于 LibTooling 的实用程序,我想为 output 提供一个用于调试的宏定义列表。 可以使用clang/gcc -dM -E -打印编译器宏定义,但如果我将-dM -E或-dD传递给 ClangTool,它似乎不起作用。 是否可以使用 LibTooling API 或 CLI 选项 ...
我想用 clang AST 解析自定义标签。 这是我的编译单元输入的简单说明。 我怎样才能在\\my-tags之后获得这些\\my-tags ? 阅读clang 用户手册后,我意识到-Wdocumentation 、 -fparse-all-comments甚至-fcomment-block- ...
我想找到params是引用类型的所有方法,在所有返回stmt之前添加一些代码。 这是我的代码: 我是叮当的新手。 我的问题是How can I find all return stmt from CXXMethodDecl ? 或任何其他解决方案? ...
类 clang::ASTContext 有一个方法: 它返回给定 AST 节点的父节点列表。 通常 AST 作为树将是树结构,但出于某些原因(也许是性能原因)Clang 允许一个节点有多个父节点。 在什么情况下(什么 C++ 源代码模式), getParents() 会返回多个父级? ...