【问题标题】:How can I find all uses of a ValueDecl?如何找到 ValueDecl 的所有用途?
【发布时间】:2018-12-05 08:13:10
【问题描述】:

我想用clang AST,分析某个变量是如何使用的并做一些 如果识别出特定的使用模式,则进行源到源转换。 特别是,我正在寻找这样的模式:

void *h;
h = create_handler(...);
use_handler(h);
destroy_handler(h);

到目前为止,我能够检测到与void *h 对应的ValueDecl。下一步 将找到h 的所有用途,看看它们是否安全以及是否 create_handler/destroy_handler 正确地支配/后支配彼此。 不幸的是,我不知道如何迭代h 的用途,似乎 ValueDecl类中没有这样的接口。

如果您能建议我如何找到 a 的所有用途,我将不胜感激 AST 中的变量,或者指出一些基于 clang 的工具来处理类似的问题。

谢谢!

【问题讨论】:

    标签: clang llvm abstract-syntax-tree static-analysis


    【解决方案1】:

    可以匹配引用变量的declRefExprs(使用 AST 匹配器)。之后,ParentMap 可用于向后遍历 AST 并递归查找使用那些declRefExprs 的 AST 节点。请记住,通常ParentMap 不是为整个 AST 构造的,而是仅为子树构造的(作为参数传递给构造函数)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多