Clang 叮当作响的AST匹配器:是否可以基于计数进行筛选?

Clang 叮当作响的AST匹配器:是否可以基于计数进行筛选?,clang,clang++,clang-tidy,clang-ast-matchers,Clang,Clang++,Clang Tidy,Clang Ast Matchers,我试图编写一个简单的叮当声检查程序,它将检查多次调用fopen()的构造函数。为此,我将构造函数与多个fopen()调用相匹配。我的目标是在第二次调用fopen()时发现潜在的内存泄漏 class Dummy_File { FILE *f1_, *f2_; public: Dummy_File(const char* f1, const char* f2, const char * mode) { f1_ = fopen(f1, mode);

我试图编写一个简单的叮当声检查程序,它将检查多次调用
fopen()
的构造函数。为此,我将构造函数与多个
fopen()
调用相匹配。我的目标是在第二次调用
fopen()
时发现潜在的内存泄漏

class Dummy_File
{
  FILE *f1_, *f2_;

  public:
    Dummy_File(const char* f1, const char* f2, const char * mode)
    {
        f1_ = fopen(f1, mode);
        f2_ = fopen(f2, mode);
    }
};
用这个

match cxxConstructorDecl(hasDescendant(callExpr(callee(functionDecl(hasName("fopen")))))).bind("x")
我能够用
fopen
找到构造函数。但是我想找到具有多个
fopen
的构造函数。我想知道是否可以根据计数进行过滤


我检查了逻辑缩小匹配器(allOf、anyOf、anything和Inspect),但没有找到与计数相关的任何内容。

恐怕没有具有所需逻辑的内置匹配器。不过,亲自实施并不难。感谢@ValeriySavchenko的指导。我想知道,有什么例子可以参考吗?我想指出,您列出的每个匹配器只检查一个节点。只有像
这样的遍历匹配器才有
hasgendant
检查许多节点,但只要找到第一个匹配,它们就会停止。我想您需要某种计数
hasgendant
。为此,您需要检查它是如何实现的。此外,最近我还回答了另一个问题,其中包括一个自定义匹配器:它有一个类似的想法,即匹配多个孩子。恐怕没有具有所需逻辑的内置匹配器。不过,亲自实施并不难。感谢@ValeriySavchenko的指导。我想知道,有什么例子可以参考吗?我想指出,您列出的每个匹配器只检查一个节点。只有像
这样的遍历匹配器才有
hasgendant
检查许多节点,但只要找到第一个匹配,它们就会停止。我想您需要某种计数
hasgendant
。为此,您需要检查它是如何实现的。此外,最近我还回答了另一个问题,其中包括一个自定义匹配器:它有一个类似的想法,即匹配多个孩子。