问题标签 [clang-ast-matchers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1665 浏览

c++ - Clang AST 匹配器:如何找到对使用右值调用的完美转发函数的调用?

给定一个函数模板,例如:

如何找到对传递右值的函数的调用:

你明白了。

我在想类似的事情:

过滤掉T被推断为引用类型的情况(表示传递了一个左值),但我不知道如何将Matcher<FunctionDecl>预期的 by连接functionDeclMatcher<TemplateSpecializationType>返回的 from hasTemplateArgument

我正在使用 Clang 3.8,以防万一(在线文档似乎是 5.0.0,并且http://releases.llvm.org/3.8.0/tools/clang/docs/LibASTMatchersReference.html给出了 404 )。

0 投票
1 回答
852 浏览

clang - Clang AST Matcher 的“AND”和“OR”

是否可以or在函数声明中使用?喜欢:

或者我们必须使用addMatcher添加更多匹配器来获得相同的结果?

0 投票
1 回答
296 浏览

clang - 如何使用 AST Matcher 在 Clang AST 中找到 BlockDecl 节点?

我需要在块中找到自我引用(目标 C)。我正在为此使用 Clang AST Matchers。

查找我创建的所有自我引用的匹配器如下:

现在我只需要将此匹配器应用于块。但我找不到该怎么做。有没有人有任何想法?

0 投票
1 回答
171 浏览

c++ - Clang - 检测头文件何时完成

我是clang的新手,我正在尝试在所有其他包含完成后添加一个#include<> 。

如果这是一个愚蠢的问题,我深表歉意。但我无法找到执行此操作的 AST Matcher。我指的是:

http://clang.llvm.org/docs/LibASTMatchersReference.html

0 投票
1 回答
434 浏览

clang-ast-matchers - lang ast dump 中的 line/col 是什么意思

我对 clang ast-dump outout 感到困惑, line 和 col 是什么意思?谢谢

-CompoundStmt 0xa87f018 <line:34:1, line:44:1> |-DeclStmt 0xa87e808 <line:35:1, col:11> |-VarDecl 0xa853fb8 col:9 使用了“类动物”调用初始化 | -CXXConstructExpr 0xa87e7d8 <col:9> 'class Anmimal' 'void (void) throw()' |-BinaryOperator 0xa87e8a0 <line:36:1, col:10> 'int' lvalue '=' | |-MemberExpr 0xa87e848 <col:1, col:4> 'int' lvalue .age 0xa8533b0 | |-DeclRefExpr 0xa87e820 '类动物' 左值 Var 0xa853fb8 'an' '类动物' | -IntegerLiteral 0xa87e880 <col:10> 'int' 100 |-CXXMemberCallExpr 0xa87e9f0 <line:38:1, col:12> 'int' |-MemberExpr 0xa87e9b8 '' .getSize 0xa853c48 | -DeclRefExpr 0xa87e990 <col:1> 'class Anmimal' lvalue Var 0xa853fb8 'an' 'class Anmimal' |-DeclStmt 0xa87edb0 <line:40:1, col:8> |-VarDecl 0xa87ea28 col:5 使用 cat 'struct Cat' callinit | -CXXConstructExpr 0xa87ed80 <col:5> 'struct Cat' 'void (void) throw()' |-BinaryOperator 0xa87ee48 <line:41:1, col:15> 'int' lvalue '=' | |-MemberExpr 0xa87edf0 <col:1, col:5> 'int' lvalue .age_cat 0xa853b38 | |-DeclRefExpr 0xa87edc8 'struct Cat' 左值 Var 0xa87ea28 'cat' 'struct Cat' | -IntegerLiteral 0xa87ee28 <col:15> 'int' 10 |-BinaryOperator 0xa87efb8 <line:42:1, col:16> 'int' lvalue '=' | |-MemberExpr 0xa87ef60 <col:1, col:5> 'int' lvalue .size_cat 0xa853b98 | |-DeclRefExpr 0xa87ef38 'struct Cat' 左值 Var 0xa87ea28 'cat' 'struct Cat' | -IntegerLiteral 0xa87ef98 <col:16> 'int' 20 -ReturnStmt 0xa87f000 `-IntegerLiteral 0xa87efe0 'int' 0

0 投票
1 回答
544 浏览

clang-ast-matchers - 如何从 typedefDecl 获取底层 cxxRecordDecl

我有一段代码:

我可以通过 clang-check 获得以下 AST:

| |-CXRecordDecl 0x3dfde48 col:16 隐式结构 S1 | |-FieldDecl 0x3dfdef8 col:9 'int' | -FieldDecl 0x3dfdf58 <line:4:5, col:9> col:9 b 'int' |-TypedefDecl 0x3dfe010 <line:1:1, line:5:3> col:3 S 'struct S1':'struct S1' |-ElaboratedType 0x3dfdfc0 'struct S1' 糖 | -RecordType 0x3dfddc0 'struct S1' |-CXRecord 0x3dfdd28 'S1' -TypedefDecl 0x3dfe0f0 <line:1:1, line:5:7> col:7 PS 'struct S1 *' -PointerType 0x3dfe0a0 'struct S1 *' -ElaboratedType 0x3dfdfc0 'struct S1' sugar -RecordType 0x3dfddc0 'struct S1' `-CXRecord 0x3dfdd28 'S1'

如果我使用 typedefDecl(),我可以匹配 S 和 PS,但是我怎样才能得到底层的 cxxRecordDecl() 呢?

0 投票
1 回答
82 浏览

c++ - 在一个clang插件中,如何查看编译翻译单元是否出错?

如果为我的插件将要运行的 AST 编译代码时出错,我希望我的 clang 插件实际上不做任何事情。

但是,我无法弄清楚哪个对象包含编译期间生成的错误列表。

是否有一个布尔查询是否有错误或一个列表 API 用于获取 TU 编译期间生成的所有错误(或所有诊断)?

谢谢你。

0 投票
1 回答
226 浏览

c++ - clang AST 匹配 ostream <<

我正在尝试为涉及流媒体的某些场景编写一个整洁的检查。考虑这个简单的函数:

如果我跑去clang-query测试一些匹配器:

operator<<这符合我在这个程序中的所有 3 种用途。伟大的。但是,如果我尝试为第一个参数的外观添加过滤器:

而已。它与整个表达式不匹配os << 4 << i。为什么不?该表达式确实有 type std::ostream。如果我直接转储 AST,我会看到:

外部和内部CXXOperatorCallExpr都说他们的表达式是 a class std::basic_ostream<char> lvalue。正确匹配这个论点的正确方法是什么?

0 投票
1 回答
3135 浏览

clang - 致命错误:使用 clang-llvm ASTMatcher 时找不到“stddef.h”文件

我不熟悉使用 ASTMatcher 并遵循教程中的代码 - https://github.com/peter-can-talk/cppnow-2017。在这里,可以使用以下命令运行工具 clang-variables:

如果我使用另一个源文件而不是 test.cpp 文件,则会收到以下错误:

我了解我的源文件有这些需要包含的头文件。我尝试将它们包含在 Makefile 中,如下所示,但错误仍然存​​在:

编译时没有错误。所以我想知道,是否可以将包含文件作为 ASTMatcher 的参数提及?请在下面找到代码:

我很感激任何帮助。

0 投票
1 回答
212 浏览

clang - 错误:找不到匹配器:等于

我正在尝试使用 clang ASTMatcher 来查找是否具有 RHS 为整数值 0 或 0.0f 的条件的语句。为此,我能够编写如下查询:

当我使用上述查询时,我收到如下错误:

但是,当我参考http://clang.llvm.org/docs/LibASTMatchersReference.html上的在线指南时,它说 Matcher equals 可用:

我在 Ubuntu 16.04LTS 上使用 llvm-4.0 和 clang 3.8。

我将不胜感激任何帮助。