如何找到ValueDecl的所有用途?

时间:2018-06-26 14:46:26

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

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

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

到目前为止,我已经能够检测到与ValueDecl相对应的void *h。下一步 将是找到h的所有用法,看看它们是否安全以及是否 create_handler/destroy_handler正确地相互支配/后支配。 不幸的是,我不知道如何遍历h的使用,看来 ValueDecl类中没有此类接口。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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